让Crontab每秒钟执行一次任务的方法


本文摘自PHP中文网,作者coldplay.xixi,侵删。

Crontab是linux下定时调度配置文件,通过它,我们可以让系统的程序、脚本、命令、任务按设定的时间、间隔、周期循环的运行。 在Crontab里时间粒度最小的是分钟。也就是说,通过Crontab配置,我们最多可以让目标任务每分钟执行一次,更频繁的执行是不行的,只能借助其它方法。

相关学习推荐:linux视频教程

比如说,如果希望一个程序每30秒执行一次,该怎么办呢?

变通的方法还是有的。 一种思路是,在Crontab里添加两条配置,一条是正常调度,每分钟执行一次,另一条是等待30秒后才执行。

1

2

3

# Need these to run on 30-sec boundaries, keep commands in sync.

* * * * *              /path/to/executable param1 param2

* * * * * ( sleep 30 ; /path/to/executable param1 param2 )

这种方法感觉有点生硬,怪怪的,但的确可行。这种方法实际是可以简写成一行:

1

* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"

还有一种方法是使用watch命令:

1

$ watch --interval .30 script_to_run_every_30_sec.sh

但watch是命令行工具,我们可以使用nohup命令让它在后台运行。

SystemD定时器

如果我们使用的linux系统里有SystemD,可以使用SystemD定时器在任何时间粒度上调度程序,理论上可以小到纳秒级别――当然,这样做有点疯狂。总之,它在任务调度上的灵活性远比Cron要高――无需使用sleep这种蹩脚的方案。

比起一行完成配置的crontab来说,建立一个SystemD定时器会显得稍微复杂一些,但为了更好的实现小于‘每分钟’粒度的调度任务,这种方法值得尝试。

SystemD定时器实现原理简单说就是两部分:一个系统service,一个SystemD定时器。SystemD定时器执行调度,而任务是写在service里。

下面有个简单的例子,目标是让系统logger每十秒钟输出一次“Hello World”;

阅读剩余部分

相关阅读 >>

Linux怎么放大字体

Linux如何查看进程端口是多少

Linux复制文件的命令是什么?

Linux中权限最大的账户是什么?

Linux实现覆盖不提示

Linux中.tar文件怎么解压

如何修改安全组内网连通策略

如何测试Linux服务器的上传下载速度

为缩短镜像制作及创建实例的周期应该怎么使用ecs镜像规范检测工具

如何在ecs 管理控制台上使用实例创建自定义镜像

更多相关阅读请进入《Linux》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...