linux crontab 命令,最小的执行时间是一分钟, 如果要在小于一分钟执行。就要换个方法来实现
1、 crontab 的延时:
原理:通过延时方法 sleep N 来实现每N秒执行。
查看 crond.service 服务:
[root@localhost ~]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 日 2018-06-10 16:13:49 CST; 8min ago Main PID: 1083 (crond) CGroup: /system.slice/crond.service └─1083 /usr/sbin/crond -n 6月 10 16:13:49 localhost systemd[1]: Started Command Scheduler. 6月 10 16:13:49 localhost systemd[1]: Starting Command Scheduler... 6月 10 16:13:49 localhost crond[1083]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 12% if used.) 6月 10 16:13:49 localhost crond[1083]: (CRON) INFO (running with inotify support)
crontab -e 输入以下语句,然后 :wq 保存退出。
* * * * * /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 5; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 10; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 15; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 20; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 25; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 30; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 35; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 40; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 45; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 50; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log * * * * * sleep 55; /usr/local/php7/bin/php /usr/local/nginx/html/www.ck.com/demo.php >> /usr/local/nginx/html/www.ck.com/demo.log
编辑demo.php文件,添加如下内容:后续查看日志,查看日志内容,是否是时时
<?php echo date("Y-m-d H:i:s",time()). PHP_EOL;
查看输出到 demo.log的日志文件内容:
注意:
60必须能整除间隔的秒数(没有余数),例如间隔的秒数是2,4,6,10,12等。
如果间隔的秒数太少,例如2秒执行一次,这样就需要在crontab 加入60/2=30条语句。不建议使用此方法,可以使用下面介绍的第二种方法。
2、 shell 脚本实现
crontab.sh
#!/bin/bash step=2 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(/usr/local/php7/bin/php '/usr/local/nginx/html/www.ck.com/demo2.php') sleep $step done exit 0
添加demo2.php
<?php file_put_contents('/usr/local/nginx/html/www.ck.com/run.log', date('Y-m-d H:i:s')."\r\n", FILE_APPEND);
crontab -e 输入以下语句,然后:wq 保存退出。
* * * * * /usr/local/nginx/html/www.ck.com/crontab.sh
查看是否输出结果
[root@localhost www.ck.com]# tail -f run.log
原理:在sh使用for语句实现循环指定秒数执行。
注意:如果60不能整除间隔的秒数,则需要调整执行的时间。例如需要每7秒执行一次,就需要找到7与60的最小公倍数,7与60的最小公倍数是420(即7分钟)。
则 crontab.sh step的值为7,循环结束条件i<420, crontab -e可以输入以下语句来实现
*/7 * * * * /usr/local/nginx/html/www.ck.com/crontab.sh
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn