Linux下用Crontab怎样实现程序每30秒执行一次
Admin 2022-06-02 群英技术资讯 2689 次浏览
这篇文章主要讲解了“Linux下用Crontab怎样实现程序每30秒执行一次”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

Crontab是linux下定时调度配置文件,通过它,我们可以让系统的程序、脚本、命令、任务按设定的时间、间隔、周期循环的运行。 在Crontab里时间粒度最小的是分钟。也就是说,通过Crontab配置,我们最多可以让目标任务每分钟执行一次,更频繁的执行是不行的,只能借助其它方法。
比如说,如果希望一个程序每30秒执行一次,该怎么办呢?
变通的方法还是有的。 一种思路是,在Crontab里添加两条配置,一条是正常调度,每分钟执行一次,另一条是等待30秒后才执行。
# Need these to run on 30-sec boundaries, keep commands in sync. * * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )
这种方法感觉有点生硬,怪怪的,但的确可行。这种方法实际是可以简写成一行:
* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"
还有一种方法是使用watch命令:
$ watch --interval .30 script_to_run_every_30_sec.sh
但watch是命令行工具,我们可以使用nohup命令让它在后台运行。
如果我们使用的linux系统里有SystemD,可以使用SystemD定时器在任何时间粒度上调度程序,理论上可以小到纳秒级别——当然,这样做有点疯狂。总之,它在任务调度上的灵活性远比Cron要高——无需使用sleep这种蹩脚的方案。
比起一行完成配置的crontab来说,建立一个SystemD定时器会显得稍微复杂一些,但为了更好的实现小于‘每分钟’粒度的调度任务,这种方法值得尝试。
SystemD定时器实现原理简单说就是两部分:一个系统service,一个SystemD定时器。SystemD定时器执行调度,而任务是写在service里。
下面有个简单的例子,目标是让系统logger每十秒钟输出一次“Hello World”;
/etc/systemd/system/helloworld.service
[Unit] Description=Say Hello [Service] ExecStart=/usr/bin/logger -i Hello World
/etc/systemd/system/helloworld.timer
[Unit] Description=Say Hello every 10 seconds [Timer] OnBootSec=10 OnUnitActiveSec=10 AccuracySec=1ms [Install] WantedBy=timers.targethelloworld.timer里并没有声明service的名称,那它和service是如何关联的呢?没错,因为它们的名称相同,都是helloworld。
如果想让整个系统使用这个定时器,这两个文件就需要放置在/etc/systemd/system下。如果想给某个用户使用,则放置在~/.config/systemd/user。想让这个定时器立即运行,需要执行下面的命令:
systemctl enable --now helloworld.timer
里面的–now标记是让定时器立即执行。否则,只有等系统重启后,或者用户登录是才会触发运行。
[Timer]部分里的各个字段的作用如下:
你会发现,SystemD定时器和Crontab定时器并不是一样的——任务调度的周期并不是按年月日小时分钟周期设定的,它是按我们第一次执行它的时间开始,每次追加一个周期的时间。如果我们钟情于Crontab那样的时间配置方式,SystemD定时器也是支持的,那就需要把OnBootSec和OnUnitActiveSec去掉,换成OnCalendar,下面是一个例子:
OnCalendar=*-*-* *:*:00,10,20,30,40,50
最后补充一点,默认情况下,SystemD定时器和service的关联是通过相同的名称,如果你愿意,也可以在[Timer]配置里通过指定Unit字段配对。
上面的几种方法都可以实现低于分钟粒度的定时调度任务。各有优点。SystemD定时器看起来更正规,但稍微复杂了一点。Crontab+sleep方式虽然别扭,但对于一些小任务来说没有不能胜任的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在linux中,可以利用yum安装一个make编译器来解决make不能用的问题,yum是基于rpm包管理的命令,能从指定的服务器下载rpm包并且进行安装,语法为“yum install -y make”。
Linux中备份和压缩的命令是什么,怎样用?本篇文章主要介绍了关于Linux如何进行备份和压缩的内容,想要获取这方面知识点的小伙伴,可以看一看这篇。
小编今天主要给大家介绍下“Linux系统如何重启apache”的相关内容,如果你对这方面比较感兴趣的话,不妨来看一看小编所整理的资料,或多或少能帮助大家解决问题。
网络中常见到用172 16 82 0 25之类的表示一个地址的用法,刚开始还以为是表示172 16 82 0~172 16 82 25之类的地址范围,后来发现实在是解
linux中usleep和sleep的区别:sleep函数用于执行挂起指定的秒数,而usleep功能是执行挂起指定的微秒数。sleep是非系统调用,在库函数中实现,是通过alarm()来设定报警时间的,usleep除了时间单位为微秒以外,在使用上与sleep差不多。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008