Linux crontab 实现时时执行

        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的日志文件内容:

        冷暖自知一抹茶ck


        注意:

        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

冷暖自知一抹茶ck


        原理:在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


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论