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

第一种方法:

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

cat kick.sh

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

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

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

第二种方法:

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

cat cron-seconds.sh

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

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

crontab -e

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

第三种方法:

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

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

crontab -e

  1. ## For excuting scripts.sh every 3 seconds##on 2014-10-15
  2. */1 * * * * /home/somedir/scripts.sh
  3. */1 * * * * sleep 3 && /home/somedir/scripts.sh
  4. */1 * * * * sleep 6 && /home/somedir/scripts.sh
  5. */1 * * * * sleep 9 && /home/somedir/scripts.sh
  6. */1 * * * * sleep 12 && /home/somedir/scripts.sh
  7. */1 * * * * sleep 15 && /home/somedir/scripts.sh
  8. */1 * * * * sleep 18 && /home/somedir/scripts.sh
  9. */1 * * * * sleep 21 && /home/somedir/scripts.sh
  10. */1 * * * * sleep 24 && /home/somedir/scripts.sh
  11. */1 * * * * sleep 27 && /home/somedir/scripts.sh
  12. */1 * * * * sleep 30 && /home/somedir/scripts.sh
  13. */1 * * * * sleep 33 && /home/somedir/scripts.sh
  14. */1 * * * * sleep 36 && /home/somedir/scripts.sh
  15. */1 * * * * sleep 39 && /home/somedir/scripts.sh
  16. */1 * * * * sleep 42 && /home/somedir/scripts.sh
  17. */1 * * * * sleep 45 && /home/somedir/scripts.sh
  18. */1 * * * * sleep 48 && /home/somedir/scripts.sh
  19. */1 * * * * sleep 51 && /home/somedir/scripts.sh
  20. */1 * * * * sleep 54 && /home/somedir/scripts.sh
  21. */1 * * * * sleep 57 && /home/somedir/scripts.sh
  22. #-----------------------------------------------------------------

他的思路是先每隔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,如 下条命令行没有被成功执行

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

延伸阅读:

Linux 定时任务 Crontab命令 详解

如何让Linux定时任务crond以秒为单位执行(如每隔3秒)的更多相关文章

  1. linux定时任务crond export变量问题

    linux定时任务crond export变量问题 1)我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器,于是就在 crontab里配置了如下内容: 50 17 ...

  2. Linux定时任务--Crond使用教程

    Linux定时任务--Crond使用教程 1. 介绍Crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后 ...

  3. linux定时任务crond那些事!

    1.定时任务crond介绍 1.1 crond是什么 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件. 特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护 ...

  4. linux 定时任务 Crond Crontab

    定时任务http://www.cnblogs.com/chensiqiqi/p/6367890.html http://www.cnblogs.com/chensiqiqi/p/6389611.htm ...

  5. Linux 定时任务 Crontab命令 详解

    前言 crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比 ...

  6. 如何让linux定时任务crontab按秒执行

    如何让linux定时任务crontab按秒执行? linux定时任务crontab最小执行时间单位为分钟如果想以秒为单位执行,应该如何设置呢?思路 正常情况是在crontab中直接定义要执行的任务,现 ...

  7. linux 定时任务 cron,利用cron进程保活

    cron定时任务 crond服务操作命令 /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service ...

  8. Linux系统定时任务crond那些事

    1 Linux系统定时任务 1.1 定时任务介绍 1.1.1 Crond是什么? Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.Centos5/ linux系统安装完操作 ...

  9. Linux:crond(crontab)定时任务

    一..定义 Crond 是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件.一般在安装完系统时,crond会默认存在. crond默认每分钟会检查系统中是否有需要执行的定时任务.如果有 ...

随机推荐

  1. SDN:motivation

    今天公交车上看了会SDN一本介绍性的书籍,具体名字不记得了.我想,我已经在实验室呆了很久的时间的,接触SDN也有一段时间了.对SDN的一些基本的知识还是需要好好整理一番.当然,这里只是一个随笔,想到什 ...

  2. 基于网格的分割线优化算法(Level Set)

    本文介绍一种网格分割线的优化算法,该方法能够找到网格上更精确.更光滑的分割位置,并且分割线能够自由地合并和分裂,下面介绍算法的具体原理和过程. 曲面上的曲线可以由水平集(level set)形式表示, ...

  3. 第九章 JQUI

    一.什么是插件 ①是遵循一定接口规范编写的程序 ②是原有系统平台功能的扩展和补充 ③只能运行在规定的系统平台下,而不能单独运行 注:由于jQuery插件是基于jQuery脚本库的扩展,所以所有jQue ...

  4. 破解Java to C# Converter

    起因 最近在对接一个第三方平台.该平台只提供了Java版本的SDK,C#版本的还处于敬请期待状态.由于C#可以复用绝大部分代码,便考虑找一个Java到C#的转换器,在试用了几个软件之后,发现还是Jav ...

  5. bench.sh 跑分测速

    #!/bin/bash #==============================================================# # Description: bench te ...

  6. Prototype原型(创建型模式)

    依赖关系的倒置:抽象不应该依赖于实现的细节,实现细节应该依赖于抽象. 原型模式的定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.prototype模式允许一个对象再创建另外一个可 ...

  7. 当泛型方法推断,扩展方法遇到泛型类型in/out时。。。

    说到泛型方法,这个是.net 2.0的时候引入的一个重要功能,c#2.0也对此作了非常好的支持,可以不需要显试的声明泛型类型,让编译器自动推断,例如: void F<T>(T value) ...

  8. canvas实践1

    今天同学遇到问题,我于是就利用了canvas帮他写了个效果,效果如图 我本来在学习不是很想做,但是昨天感觉自己学的有点累就去帮忙做了,我的思路是每次画一个矩形,然后通过rotate旋转让它自身旋转45 ...

  9. mtr命令详解

    原文地址:http://blog.hexu.org/archives/1050.shtml 一般在windows 来判断网络连通性用ping 和tracert,ping的话可以来判断丢包率,trace ...

  10. JDK历史版本

    http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html