我想运行一个程序,让它在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=
属性。)