让Crontab每秒钟执行一次任务的方法_网站服务器运行维护,linux,Crontab

让Crontab每秒钟执行一次任务的方法_网站服务器运行维护,linux,Crontab,第1张

centos 怎么启动图形界面?_网站服务器运行维护

centos启动图形界面的方法:首先通过yum的group指令来安装成套的软件包;然后通过KDE安装图形桌面环境;最后开启图形界面即可,代码为【[root@bogon ~]# init 5】。


让Crontab每秒钟执行一次任务的方法_网站服务器运行维护,linux,Crontab,第2张

让Crontab每秒钟执行一次任务的方法_网站服务器运行维护,linux,Crontab,第3张

Crontab是linux下定时调度配置文件,通过它,我们可以让系统的程序、脚本、命令、任务按设定的时间、间隔、周期循环的运行。


在Crontab里时间粒度最小的是分钟。


也就是说,通过Crontab配置,我们最多可以让目标任务每分钟执行一次,更频繁的执行是不行的,只能借助其它方法。


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

比如说,如果希望一个程序每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命令让它在后台运行。


SystemD定时器

如果我们使用的linux系统里有SystemD,可以使用SystemD定时器在任何时间粒度上调度程序,理论上可以小到纳秒级别——当然,这样做有点疯狂。


总之,它在任务调度上的灵活性远比Cron要高——无需使用sleep这种蹩脚的方案。


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


centos如何查看用户属于哪个组?_网站服务器运行维护

centos查看用户属于哪个组的方法:1、groups命令法,只执行groups命令就可以查看;2、查看【/etc/group】法,通过grep命令查询某个用户所在的用户组;3、id命令法,只执行id命令就可以查看。


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]部分里的各个字段的作用如下:

  • OnBootSec – 系统启动多少秒后开始执行调度
  • OnUnitActiveSec – 重复调度相关service的时间间隔。


    就是这行配置决定了跟cron job一样定时调度的动作。


  • AccuracySec – 定时器精度。


    默认是一分钟,跟cron很相似。


    可以要求的更高,但精度增加会带来更多系统的消耗,更频繁的唤醒CPU。


    上面的配置里写的是1ms,显然不是个聪明的决定。


    通常我们可以把它设置为 1(1秒),对于我们这样低于1分钟时间粒度的定时器的精度要求已经够用了。


    也是因为如此,我们会看到,实际程序运行时输出“Hello World”消息的时间经常会延迟1秒左右。


    如果你认为这一秒左右的延迟不是问题,那就应该这样设定。


你会发现,SystemD定时器和Crontab定时器并不是一样的——任务调度的周期并不是按年月日小时分钟周期设定的,它是按我们第一次执行它的时间开始,每次追加一个周期的时间。


如果我们钟情于Crontab那样的时间配置方式,SystemD定时器也是支持的,那就需要把OnBootSecOnUnitActiveSec去掉,换成OnCalendar,下面是一个例子:

OnCalendar=*-*-* *:*:00,10,20,30,40,50

最后补充一点,默认情况下,SystemD定时器和service的关联是通过相同的名称,如果你愿意,也可以在[Timer]配置里通过指定Unit字段配对。


上面的几种方法都可以实现低于分钟粒度的定时调度任务。


各有优点。


SystemD定时器看起来更正规,但稍微复杂了一点。


Crontab+sleep方式虽然别扭,但对于一些小任务来说没有不能胜任的。


以上就是让Crontab每秒钟执行一次任务的方法的详细内容,更多请关注ki4网其它相关文章!

centos怎么运行sh?_网站服务器运行维护

centos运行sh文件的方法:1、先设置权限,命令为【chmod + x ****.sh】;1、直接【./】加上文件名【.sh】运行;2、直接sh加上文件名【.sh】运行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/561690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020-07-06
下一篇 2020-07-07

发表评论

登录后才能评论

评论列表(0条)

保存