systemd 计时器规则

systemd 计时器规则

我想运行一个程序,让它在2019-08-14 13:00:00

此后,每 4,096 分钟运行一次。

我知道/整数每分钟可以重复一次。但这样写是错误的:

OnCalendar=2019-08-14 13:00/4096:00 UTC

好像4096分钟是不允许的。错误:无法解析日历规范,忽略:2019-08-14 13:8/4096:00 UTC

有谁知道如何实施吗?

答案1

systemd 日历规范中的语法/仅适用于正在评估的特定字段。它类似于*允许字段的每个值的语法,并且通常相当于/1重复该字段的每 1 个单位。

这也类似于 cron,一些 cron 实现也允许类似的/语法(略有不同,需要间隔,例如5-59/8)和*语法。

的文档系统时间(7)一起提及*/使用该术语匹配,这强烈暗示仅对该字段的限制:

在日期和时间规范中,任何组件都可以指定为“ *”,在这种情况下任何值都将匹配。或者,可以将每个组件指定为以逗号分隔的值列表。值可以以“ ”和重复值作为后缀/,这表明该值本身和该值加上重复值的所有倍数是匹配的。用“ ”分隔的两个值..可以用来表示一个值的范围;范围后面还可以跟有“ /”和重复值。

因此不幸的是,实际上不可能使用每 4096 分钟重复一次的单一日历规范。

一种选择是使用不同的计时器单位设置,例如OnUnitActiveSec=,这将在与其关联的单元处于活动状态后一定时间间隔触发计时器。由于触发计时器将激活设备,因此会按照您选择的时间间隔定期重复触发。

您可以将其与日历事件结合起来,这样它首先在该日历事件上触发,然后通过规则重复OnUnitActiveSec=。请注意,如果机器重新启动,这可能会停止,在这种情况下,需要触发一次设备才能使循环滚动,您可以使用例如OnBootSec=. (跨重新启动工作的另一个选项是设置Persistent=属性。)

相关内容