zoukankan      html  css  js  c++  java
  • 如何让Linux定时任务crond以秒为单位执行(如每隔3秒)

    需要用到Shell脚本每隔3秒钟去监控一个软件进程的运行状态,发现crond似乎只支持到分,不知道秒,怎么办呢?

    第一种方法:

    当然首先想到的是写一个触发的脚本,在触发脚本中使用死循环来解决此问题,如下:

    cat kick.sh

    #!/bin/bash
    while : ;do
    	/home/somedir/scripts.sh 2>/dev/null &
    	sleep 3
    done

    注意第一次运行时请不要使用 bash kick.sh & 这种后台运行的方式,它会僵死的。

    可以把它放到计划任务使其运行,然后将计划任务中的此条目删除即可。最后把这个脚本放到 /etc/rc.local 让它每次开机都可以被运行。

    第二种方法:

    和第一种方法类似,只不过感觉比第一种更便捷一些。

    cat cron-seconds.sh

    #!/bin/bash
    #For excuting the scripts every 3 seconds in crond.
    #20100124.WXG
    
    for((i=1;i<=20;i++));do
    
    	/home/somedir/scripts.sh 2>/dev/null &
    	sleep 3
    done

    然后写入的crontab里每分钟执行一次,如下

    crontab -e

    * * * * * /bin/bash /home/somedir/cron-seconds.sh

    第三种方法:

    那么如何使用计划任务来直接实现呢?

    最后解决方案如下,经验证,脚本运行非常稳定。

    crontab -e

    ## For excuting scripts.sh every 3 seconds##on 2014-10-15
    */1 * * * *  /home/somedir/scripts.sh
    */1 * * * * sleep 3 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 6 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 9 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 12 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 15 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 18 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 21 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 24 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 27 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 30 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 33 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 36 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 39 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 42 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 45 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 48 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 51 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 54 &&  /home/somedir/scripts.sh
    */1 * * * * sleep 57 &&  /home/somedir/scripts.sh
    #-----------------------------------------------------------------

    他的思路是先每隔1秒钟触发定时任务,然后又休眠 3秒、6秒、9秒等间隔 来执行具体的Shell脚本。

    我还是比较倾向于使用第三种方法的。因为第一种方法和第二种方法并不是严格的间隔3秒执行的,会大于3秒,因为执行scripts.sh也是需要一定时间的,即使已经加了&符号放到了后台执行也会存在一定的误差。如果对于精确度要求不高,推荐使用第二种方法。


    工作中的一次用 PHP脚本每隔3秒钟去监控一个Memcached代理服务器Magent的运行状态

    crontab -e

    #-----------------------------------------------------------------
    */1 * * * *  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 3 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 6 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 9 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 12 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 15 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 18 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 21 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 24 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 27 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 30 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 33 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 36 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 39 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 42 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 45 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 48 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 51 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 54 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    */1 * * * * sleep 57 &&  /usr/local/php/bin/php  /usr/local/nginx/www/MemcachedMagent/index.php  172.16.8.81 >/dev/null 2>&1
    #-----------------------------------------------------------------


    crontab定时任务不执行

    --> 一般计划任务的问题大部分是出在环境变量上面, 要么就写绝对路径,要么就在脚本的开头加载/etc/profile,如 下条命令行没有被成功执行

    00 01 * * * php /usr/local/nginx/www/sjf/crontab.php production Daemon delInvalidFans >/dev/null 2>&1
    

    延伸阅读:

    Linux 定时任务 Crontab命令 详解

  • 相关阅读:
    c:forTokens标签循环输出
    jsp转long类型为date,并且格式化
    spring中@Param和mybatis中@Param使用区别(暂时还没接触)
    734. Sentence Similarity 有字典数组的相似句子
    246. Strobogrammatic Number 上下对称的数字
    720. Longest Word in Dictionary 能连续拼接出来的最长单词
    599. Minimum Index Sum of Two Lists两个餐厅列表的索引和最小
    594. Longest Harmonious Subsequence强制差距为1的最长连续
    645. Set Mismatch挑出不匹配的元素和应该真正存在的元素
    409. Longest Palindrome 最长对称串
  • 原文地址:https://www.cnblogs.com/52php/p/5675793.html
Copyright © 2011-2022 走看看