让crond以秒为单位执行任务的方法

昨天写了一个需求的应用脚本,根据实际需求最好能使它每隔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 2010-01-22

* * * * *  /home/somedir/scripts.sh

* * * * * sleep 3 &&  /home/somedir/scripts.sh

* * * * * sleep 6 &&  /home/somedir/scripts.sh

* * * * * sleep 9 &&  /home/somedir/scripts.sh

* * * * * sleep 12 &&  /home/somedir/scripts.sh

* * * * * sleep 15 &&  /home/somedir/scripts.sh

* * * * * sleep 18 &&  /home/somedir/scripts.sh

* * * * * sleep 21 &&  /home/somedir/scripts.sh

* * * * * sleep 24 &&  /home/somedir/scripts.sh

* * * * * sleep 27 &&  /home/somedir/scripts.sh

* * * * * sleep 30 &&  /home/somedir/scripts.sh

* * * * * sleep 33 &&  /home/somedir/scripts.sh

* * * * * sleep 36 &&  /home/somedir/scripts.sh

* * * * * sleep 39 &&  /home/somedir/scripts.sh

* * * * * sleep 42 &&  /home/somedir/scripts.sh

* * * * * sleep 45 &&  /home/somedir/scripts.sh

* * * * * sleep 48 &&  /home/somedir/scripts.sh

* * * * * sleep 51 &&  /home/somedir/scripts.sh

* * * * * sleep 54 &&  /home/somedir/scripts.sh

* * * * * sleep 57 &&  /home/somedir/scripts.sh

#-----------------------------------------------------------------

好好想想就可以明白其中的道理了。

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

时间: 2024-08-30 05:09:57

让crond以秒为单位执行任务的方法的相关文章

手机上下载微博和秒拍视频的方法

虽然新浪微博APP自己没有提供下载微博视频的功能,但我们可以借助第三方工具来下载微博视频.网上很多是要安装软件到电脑上才能用的,但如果我们想在手机上用,就用不了. 所以今天分享一个在手机上也能下载微博和秒拍视频的方法. 下载新浪微博视频和秒拍视频的方法: 1. 打开新浪微博APP,找到想要下载的视频,在含有这个视频的微博页面,点击右上角三个点号(...),然后会出现分享的弹窗,点击复制链接或通过分享到微信QQ等获取分享链接.秒拍视频也是一样的,在秒拍视频APP里找到要下载的视频,在分享弹框中复制

如何利用crond实现秒级定时任务?

1.问题引出:crond实现定时任务的思路 crond服务默认情况每分钟检查系统中是否有需要执行的定时任务,如果有,就会根据事先定义好的规则来执行这个定时任务,而crond配置的书写语法中:"* * * * * command",最低的时间单位是分钟,所以说,一个crond定时任务最多只能执行分钟级的定时任务,这是显然的!但事实情况是,利用crond也是可以实现秒级的定时任务的,既然一个定时任务真的就只能实现分钟级的定时任务,那我几个定时任务同时实现一个功能,是否有可能达到秒级???

linux下定时执行任务的方法

在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为"crontab",是"cron table"的简写. 一.cron在3个地方查找配置文件:1./var/spool/

***linux下用cron定时执行任务的方法

名称 : crontab  使用权限 : 所有使用者 使用方式 : crontab file [-u user]-用指定的文件替代目前的crontab. crontab-[-u user]-用标准输入替代目前的crontab. crontab-1[user]-列出用户目前的crontab. crontab-e[user]-编辑用户目前的crontab. crontab-d[user]-删除用户目前的crontab. crontab-c dir- 指定crontab的目录. crontab文件的格

C# Datetime.Ticks将时间转换成以秒为单位与格林尼治时间

转载于:http://blog.csdn.net/tyxkzzf/article/details/49132237 在编程前要知道C#中TimeSpan.Ticks到底是多大:TICK最小的时间单位刻度,相当于100奈秒(1奈秒等于十亿分之一秒).刻度可正可负.下面举个C#例子计算下两个日期的时间差吧.DateTime dt = new DateTime(1970, 1, 1);TimeSpan d =DateTime.Parse("2011/12/24 9:41:40")- dt;l

Eclipse启动Tomcat时45秒超时的解决方法

Eclipse启动Tomcat时,默认配置的启动超时时长为45秒.假若项目需要加载的东西比较多,启动时间会比较久,如果启动超过45秒将会报错.有两种解决途径,方法只有一个,就是修改启动时间. 1. 修改eclipse的工作空间下面的server.xml配置文件. 找到eclipse的工作空间,在工作空间里面找到server.xml配置文件,例如我的eclipse的server.xml是在:E:\program\workspace\.metadata\.plugins\org.eclipse.ws

使用timer8秒读取一次方法进行操作

public void TestofTimer() { System.Timers.Timer tt = new System.Timers.Timer(); //获取或设置引发 Elapsed 事件的间隔.毫秒为单位 tt.Interval = 8000; //达到间隔时发生的时间.括号里面是一个执行方法,需要带有两个参数是object和ElapsedEventArgs. tt.Elapsed += new ElapsedEventHandler(Hello); //如果 Timer 应在每次

设置N秒后执行某个方法或函数

设置N秒后执行一个函数,最常用的是设置一个定时器,今天刚看到有这样一个函数,感觉还是比较简单实用的,就先记下来,免得忘记了. 5秒后执行pushSecondController这个函数 [self performSelector:@selector(pushSecondController) withObject:nil afterDelay:5.0f]; 比如:在第一个视图出现后5秒就跳转到第二个视图,代码如下: 参考资料:http://blog.csdn.net/chaoyuan899/ar

Laydate只显示时分 不显示秒的功能实现方法

直接写在style内 /*去除日期秒的样式*/ .layui-laydate-content>.layui-laydate-list { padding-bottom: 0px; overflow: hidden; } .layui-laydate-content>.layui-laydate-list>li{ width:50% } .merge-box .scrollbox .merge-list { padding-bottom: 5px; }  可參考文章 https://www