zoukankan      html  css  js  c++  java
  • linux定时任务crontab 实现如何每秒执行一次!

    linux crontab 命令,最小的执行时间是一分钟。如需要在小于一分钟内重复执行,可以有两个方法实现。


    Cron 各项的描述

    以下是 crontab 文件的格式:

    {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 
    o minute: 区间为 0 – 59 
    o hour: 区间为0 – 23 
    o day-of-month: 区间为0 – 31 
    o month: 区间为1 – 12. 1 是1月. 12是12月. 
    o Day-of-week: 区间为0 – 7. 周日可以是0或7.

    1.使用延时来实现每N秒执行

    创建一个php做执行动作,非常简单,就是把当前时间写入log。

    <?php  
    file_put_contents('/home/fdipzone/php/crontab/run.log', date('Y-m-d H:i:s')."
    ", FILE_APPEND);  
    ?>  

    crontab -e 输入以下语句,然后 :wq 保存退出。

    * * * * * php /home/fdipzone/php/crontab/tolog.php  
    * * * * * sleep 10; php /home/fdipzone/php/crontab/tolog.php  
    * * * * * sleep 20; php /home/fdipzone/php/crontab/tolog.php  
    * * * * * sleep 30; php /home/fdipzone/php/crontab/tolog.php  
    * * * * * sleep 40; php /home/fdipzone/php/crontab/tolog.php  
    * * * * * sleep 50; php /home/fdipzone/php/crontab/tolog.php  

    使用 tail -f 查看执行情况,可以见到log每10秒被写入一条记录。

    fdipzone@ubuntu:~$ tail -f /home/fdipzone/php/crontab/run.log  
    2014-03-31 21:47:01  
    2014-03-31 21:47:11  
    2014-03-31 21:47:21  
    2014-03-31 21:47:31  
    2014-03-31 21:47:41  
    2014-03-31 21:47:51  
    2014-03-31 21:48:01  

    原理:通过延时方法 sleep N  来实现每N秒执行。
    注意:

    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  
        $(php '/home/fdipzone/php/crontab/tolog.php')  
        sleep $step  
    done  
      
    exit 0  

    crontab -e 输入以下语句,然后:wq 保存退出。

    # m h  dom mon dow   command  
    * * * * * /home/fdipzone/php/crontab/crontab.sh 

    使用 tail -f 查看执行情况,可以见到log每2秒被写入一条记录。

    fdipzone@ubuntu:~/php/crontab$ tail -f run.log  
    2014-03-31 22:23:01  
    2014-03-31 22:23:03  
    2014-03-31 22:23:06  
    2014-03-31 22:23:08  
    2014-03-31 22:23:10  
    2014-03-31 22:23:12  
    2014-03-31 22:23:14  
    2014-03-31 22:23:16  
    2014-03-31 22:23:18  
    2014-03-31 22:23:20  
    2014-03-31 22:23:22  
    2014-03-31 22:23:25  
    2014-03-31 22:23:27  
    2014-03-31 22:23:29  
    2014-03-31 22:23:31  
    2014-03-31 22:23:33  
    2014-03-31 22:23:35  
    2014-03-31 22:23:37  
    2014-03-31 22:23:39  
    2014-03-31 22:23:41  
    2014-03-31 22:23:44  
    2014-03-31 22:23:46  
    2014-03-31 22:23:48  
    2014-03-31 22:23:50  
    2014-03-31 22:23:52  
    2014-03-31 22:23:54  
    2014-03-31 22:23:56  
    2014-03-31 22:23:58  
    2014-03-31 22:24:00  

    原理:在sh使用for语句实现循环指定秒数执行。
    注意:如果60不能整除间隔的秒数,则需要调整执行的时间。例如需要每7秒执行一次,就需要找到7与60的最小公倍数,7与60的最小公倍数是420(即7分钟)。

    则 crontab.sh step的值为7,循环结束条件i<420, crontab -e可以输入以下语句来实现

    # m h  dom mon dow   command  
    */7 * * * * /home/fdipzone/php/crontab/crontab.sh  
  • 相关阅读:
    POJ 3660 Cow Contest (floyd求联通关系)
    POJ 3660 Cow Contest (最短路dijkstra)
    POJ 1860 Currency Exchange (bellman-ford判负环)
    POJ 3268 Silver Cow Party (最短路dijkstra)
    POJ 1679 The Unique MST (最小生成树)
    POJ 3026 Borg Maze (最小生成树)
    HDU 4891 The Great Pan (模拟)
    HDU 4950 Monster (水题)
    URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
    URAL 2037 Richness of binary words (回文子串,找规律)
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/10330482.html
Copyright © 2011-2022 走看看