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命令 详解

  • 相关阅读:
    mysql之数据类型以及操作数据表
    mysql之提示符
    神经网络-1
    matlab使用摄像头人脸识别
    使用git和intelliJ
    VS配置使用第三方库
    Qt(1)
    附录:其他相关知识
    附录:python and numpy
    上手Caffe(二)
  • 原文地址:https://www.cnblogs.com/52php/p/5675793.html
Copyright © 2011-2022 走看看