我正在寻找指南来了解 OnCalendar 的工作原理。我不明白......请问如何让 systemd 计时器每 2 天运行一次?
[Unit]
Description=systemd every 2 days.
[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true
Unit=personal.service
[Install]
WantedBy=timers.target
答案1
看系统时间(7)。
这告诉我们的每日报表是:
OnCalendar=*-*-* 00:00:00
第三个代表*
该月的哪一天。所以:
OnCalendar=*-*-01 00:00:00
意思是每个月的第一天。 “每两天”一词需要一个起点,否则就会含糊不清。可以是自系统启动以来每两天一次,也可以是自 2020 年 1 月 1 日以来的每个偶数日,或者自纪元以来的每个奇数日,等等。今天是偶数日还是奇数日?定义您想要安排事情的具体日期要容易得多。
这会起作用:
OnCalendar=*-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 00:00:00
这表示它将在每月的每个奇数日运行,这非常接近您每天两次的要求。
如果只是自启动以来,那么这应该有效:
OnBootSec=2d
但是,如果您重新启动,则计划将重置,并且在接下来的两天内不会触发。
您可以在 中查看 和其他选项OnBootSec=
的详细信息OnCalendarSec=
systemd.定时器(5)
您可以使用 测试其他形式systemd-analyze calendar <expr>
。这将为您提供一些有关您的表情的信息,而无需编辑计时器并尝试启用它。
例子:
$ systemd-analyze calendar *-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 00:00:00
Original form: *-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
Normalized form: *-*-01,03,05,07,09,11,13,15,17,19,21,23,25,27,29,31 00:00:00
Next elapse: Sun 2021-01-17 00:00:00 CET
(in UTC): Sat 2021-01-16 23:00:00 UTC
From now: 1 day 1h left
Original form: 00:00:00
Normalized form: *-*-* 00:00:00
Next elapse: Sat 2021-01-16 00:00:00 CET
(in UTC): Fri 2021-01-15 23:00:00 UTC
From now: 1h 55min left