java30秒规则_每30秒运行一次cron

如果您使用SystemD运行最近的Linux操作系统,您可以使用SystemD Timer单元以您希望的任何粒度级别(理论上低至纳秒)运行您的脚本,并且 - 如果您愿意 - 比Cron允许的更灵活的启动规则 . No sleep kludges required

设置比cron文件中的单行要多一些,但如果你需要比“每分钟”更好的东西,那么值得付出努力 .

该SystemD计时器模型基本上是这样的 - 计时器是在计时器过去时启动服务单元的单元 .

因此,对于要安排的每个脚本/命令,您必须具有服务单元,然后是其他计时器单元 . 单个计时器单元可以包含多个计划,因此您通常不需要多个计时器和一个服务 .

这是一个每10秒记录一次“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.target

设置这些单元后(如 /etc/systemd/system ,如上所述,对于系统范围的设置,或在 ~/.config/systemd/user 进行用户特定设置),您需要通过运行 systemctl enable helloworld.timer 来启用计时器(不是服务) . 如果要立即启动计时器(而不是在重新启动后等待它启动),也要运行 systemctl start helloworld.timer .

此处使用的 [Timer] 部分字段如下:

OnBootSec - 每次启动后多秒启动服务 .

OnUnitActiveSec - 在上次启动服务后的几秒钟内启动服务 . 这就是导致计时器重复并且表现得像cron作业的原因 .

AccuracySec - 设置计时器的准确性 . 定时器仅与此字段集一样准确,默认值为1分钟(模拟cron) . 不要求最佳精度的主要原因是提高功耗 - 如果SystemD可以安排下一次运行与其他事件一致,则需要更少地唤醒CPU . 上面示例中的 1ms 并不理想 - 我通常在我的子分钟预定作业中将精度设置为 1 (1秒),但这意味着如果您查看显示"Hello World"消息的日志,那么'd see that it is often late by 1 second. If you'就可以了,我建议将精度设置为1秒或更长 .

您可能已经注意到,此计时器不会在每个挂钟时段的开始处开始(即,它不会在时钟的第10秒开始,然后是20,依此类推) . 相反,只是在计时器瘫痪时发生 . 如果系统在12:05:37启动,则下次命令运行时间为12:05:47,然后是12:05:57等 . 如果您对实际挂钟精度感兴趣,那么您可以想要替换 OnBootSec 和 OnUnitActiveSec 字段,而是使用您想要的计划设置 OnCalendar 规则(根据我的理解,使用日历格式不能超过1秒) . 上面的例子也可以写成:

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

最后注意:正如您可能猜到的那样, helloworld.timer 单元启动 helloworld.service 单元,因为它们具有相同的名称(减去单元类型后缀) . 这是默认设置,但您可以通过为 [Timer] 部分设置 Unit 字段来覆盖它 .

更多血腥细节可在以下网址找到:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值