Linux crontab 定时任务最少到每分钟执行一次,一些需要频繁运行启动的应用场景无法满足。
Linux crontab:
* * * * * - - - - - | | | | | | | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat | | | +---------- month (1 - 12) OR jan,feb,mar,apr ... | | +--------------- day of month (1 - 31) | +-------------------- hour (0 - 23) +------------------------- minute (0 - 59)
crontab能到分钟级,我们可以在sh文件里写一个循环,然后每循环一次间隔多少秒执行下次循环。
先不说了看代码
#!/bin/sh step=2 #循环间隔的秒数 #(i+step) 是每次循环i值+step 也就是每次循环+2 i到60停止循环 for (( i = 0; i < 60; i=(i+step) )); do /www/server/php/56/bin/php /www/wwwroot/crontab.php /www/server/php/56/bin/php /www/wwwroot/crontab_1.php /www/server/php/56/bin/php /www/wwwroot/crontab_2.php /www/server/php/56/bin/php /www/wwwroot/crontab_3.php /www/server/php/56/bin/php /www/wwwroot/crontab_4.php /www/server/php/56/bin/php /www/wwwroot/crontab_5.php /www/server/php/56/bin/php /www/wwwroot/crontab_6.php /www/server/php/56/bin/php /www/wwwroot/crontab_7.php sleep $step done exit 0
我在项目里使用这种方式定时任务稳定运行了有半年了,会有一点点的时间误差 因为中间PHP脚本运行需要耗时,但是这些误差可以忽略不计。
crontab添加定时任务的时候需要根据脚本的几个数值做相应的时间调整
比如我上面的间隔时间是2秒,每次循环i都会加2,当i到60的时候就会停止,crontab定时任务如下
执行crontab -e 添加如下内容 每分钟运行一次
*/1 * * * * /data/apps/crontab/php_api_clear.sh
比如你的任务需要5秒运行一次 间隔时间(step =5)循环 i 到180 停止 那么定时任务应设为每3分钟执行一次,
脚本内容如下:
#!/bin/sh step=5 #间隔的秒数 for (( i = 0; i < 180; i=(i+step) )); do /www/server/php/56/bin/php /www/wwwroot/crontab.php /www/server/php/56/bin/php /www/wwwroot/crontab_1.php /www/server/php/56/bin/php /www/wwwroot/crontab_2.php /www/server/php/56/bin/php /www/wwwroot/crontab_3.php /www/server/php/56/bin/php /www/wwwroot/crontab_4.php /www/server/php/56/bin/php /www/wwwroot/crontab_5.php /www/server/php/56/bin/php /www/wwwroot/crontab_6.php /www/server/php/56/bin/php /www/wwwroot/crontab_7.php sleep $step done exit 0