让Linux下的cron以秒为单位执行shell脚本的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 让它每次开机都可以被运行。

第二种方法:

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

代码如下:

#!/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 * * * *  /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
#-----------------------------------------------------------------

(0)

相关推荐

  • Linux Shell脚本编程的注意事项

    一.常用技巧 复制代码 代码如下: ssh user@server bash < /path/to/local/script.sh#ssh到远程服务器执行一个脚本,此命令可以避免将脚本上传到远程服务器 ssh user@host cat /path/to/remotefile | diff /path/to/localfile -#比较远程文件和本地文件的差异 vim scp://username@host//path/to/somefile#vi一个远程文件 curl ifconfig.me#

  • 阿里云云服务器Linux系统更新yum源Shell脚本

    所有执行的脚本都需要root身份来执行,执行方法:以root身份执行命令:bash xxx.sh 功能:自动检测系统并更新源 适用系统版本:兼容线上所有linux版本 执行方法:以root身份执行命令:bash update_source.sh 解决了什么问题:一键式检测系统并更新源 给客户带来了好处:用户只需执行该脚本一次即可自动检测系统并更新源. 备注:由于系统版本都有支持的周期所以部分源可能会出现不可用的情况,包括官方的源,这是正常情况 #!/bin/bash ##############

  • Linux命令行和shell脚本编程宝典 Richard Blum

    第一个脚本文件 复制代码 代码如下: #!/bin/bashecho "This is my first bash code!"exit 0 重定向符号和数学计算 复制代码 代码如下: #!/bin/bashecho -n "The time and date are: "datevalue1=100  #等号前后不允许出现空格value2=$value1echo -n "value1="echo $value1echo -n "val

  • Linux Shell脚本编程初体验

    通常,当人们提到"shell脚本语言"时,浮现在他们脑海中是bash,ksh,sh或者其它相类似的linux/unix脚本语言.脚本语言是与计算机交流的另外一种途径.使用图形化窗口界面(不管是windows还是linux都无所谓)用户可以移动鼠标并点击各种对象,比如按钮.列表.选框等等.但这种方式在每次用户想要计算机/服务器完成相同任务时(比如说批量转换照片,或者下载新的电影.mp3等)却是十分不方便.要想让所有这些事情变得简单并且自动化,我们可以使用shell脚本. 某些编程语言,像

  • linux c程序中获取shell脚本输出的实现方法

    1. 前言Unix界有一句名言:"一行shell脚本胜过万行C程序",虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果.例如,执行外部命令ping后,如果执行失败,我们希望得到p

  • Linux中执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: cd /data/shell ./hello.sh ./的意思是说在当前的工作目录下执行hello.sh.如果不加上./,bash可能会响应找到不到hello.sh的错误信息.因为目前的工作目录(/data/shell)可能不在

  • Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享

    环境: ssh server: 192.168.100.29  server.example.com ssh client: 192.168.100.30  client.example.com 通过root用户建立秘钥认证实现SHELL脚本管理,分发,部署 首先client端创建秘钥对,并将公钥分发给需要登录的SSH服务端 注:公钥相当于锁,私钥相当于钥匙,我们这里相当于在客户端创建一对钥匙和锁,想要做到SSH免密码登录,就相当于我们将锁分发到服务端并装锁,然后客户端就可以利用钥匙开锁. 一.

  • Linux shell脚本编程if语句的使用方法(条件判断)

    if 语句格式if  条件then Commandelse Commandfi        别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unexpected end of fi     if 的三种条件表达式 ifcommandthen if 函数then 命令执行成功,等于返回0 (比如grep ,找到匹配)执行失败,返回非0 (grep,没找到匹配)if [ expression_r_r_r  ]then    表达式结果为真,则返回0

  • linux shell脚本学习xargs命令使用详解

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子. 1.

  • 一个监控LINUX目录和文件变化的Shell脚本分享

    最近看到群里有人聊到他们的服务器最近被挂马,然后想利用一个脚本能够实时监控web目录下文件的变化,也就是对该目录的增删改操作都会记录到相应日志下. 当时感觉这个功能的确实有点意思,所以网上查阅了些资料,自己研究了下,这会儿有空写了个脚本,分享给大家,如有问题,还请大家指出. 以下我写了两个脚本: 脚本1:将需要监控的目录的原始状态保存到LOG日志 脚本2:将脚本1的原始状态与本脚本比对,如果目录文件发生变化,则将变化的内容保存到日志. 注:原理实际上利用的是du -sb输出值来判断文件的变化,再

  • Linux Shell 脚本编程入门教程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用.深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一. Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh).Bourne

  • linux下统计appche站点IP访问量的shell脚本

    经常需要根据IP地址统计apache站点访问量,最基本的脚本. 根据IP访问量降序排列: 复制代码 代码如下: #!/bin/bash#Script_name: access_count acc_log=/usr/local/apache2/logs/access_log /bin/awk '{print $1}' $acc_log  | sort | uniq -c | sort -nr 执行效果: 复制代码 代码如下: [root@zabbix ~]# sh access_count  94

随机推荐