如何离线定时发送流量
仓库地址,对于crontab的介绍还不够详细,后面会考虑再写两篇,一篇为crontab快速入门+快速复习,一篇为对crontab的详细介绍与原理解析以及替代品对比。
如何离线定时发送流量
在流量实验的时候(benchmark/ press test/ simulation),我们经常遇到需要长时间发送流量的情况。这时候如果让人呆在机器旁边按时启动的话,一个是非常折磨人的精神(必须要定闹钟严格按时),另外一个方面也不能够明确地保证实验能够按时进行按时结束。
虽然经过多次实验后,在早期还是建议人工介入,这样如果出现了问题也能够及时进行处理。
问题分解
离线定时发送流量分为两个部分:
- 离线执行,或者更准确地说,是后台执行
- 定时执行,可以分为重复与不重复两种。
后台执行
最常见的后台执行莫过于nohup命令。考虑到我们使用的是gatling,因此命令如下:
nohup ~/gatling/bin/gatling.sh < input &
解释:
- 将要执行的命令输入到文本文件
input中,然后使用输入重定向将内容导入。 &表示后台执行- nohup会将输出导入到
nohup.out中,在需要调试的时候会比较方便。如果运行时间非常长,为了防止硬盘空间不够,可以加上> /dev/null(或者只将普通输出导入到空,保留错误输出)
重定向相关基础知识:
/dev/null 代表空设备文件
> 代表重定向到哪里
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
定时执行
目前比较常见的方法为使用cron命令的配置文件crontab,参考资料:
比较简单的来说,就是下面这个表
# crontab -e
SHELL=/bin/bash
MAILTO=root@example.com
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#* * * * * command
#分 时 日 月 周 命令
# backup using the rsbu program to the internal 4TB HDD and then 4TB external
01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2
# Set the hardware clock to keep it in sync with the more accurate system clock
03 05 * * * /sbin/hwclock --systohc
# Perform monthly updates on the first of the month
# 25 04 1 * * /usr/bin/dnf -y update
若在同一个项内使用,,表示并列。也可以使用-表示范围。
比如:59 23 * * 1,2,3,4,5 /home/swz/aa.sh 或者 59 23 * * 1-5 /home/swz/aa.sh 表示在每个工作日的23:59分执行aa.sh脚本
若在一项内使用*/x,表示每隔x个单位后执行。
比如:0 */10 * * * /usr/bin/curl http://www.aaa.com/index.php表示每隔十分钟访问一次该网址。

浙公网安备 33010602011771号