![具有多个日历时刻的计时器](https://linux22.com/image/143534/%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E6%97%A5%E5%8E%86%E6%97%B6%E5%88%BB%E7%9A%84%E8%AE%A1%E6%97%B6%E5%99%A8.png)
我正在使用 systemd 计时器和单元来自动触发备份作业。但目前它只在晚上的某一时刻运行。是否可以通过在同一个计时器中声明它来使其在多个时刻运行?
现在是这样的:
[Unit]
Description=Run luky-borg-backup every night
[Timer]
OnCalendar=21:00
AccuracySec=1h
Persistent=yes
[Install]
WantedBy=timers.target
应该是这样的:
[Unit]
Description=Run luky-borg-backup every night
[Timer]
OnCalendar=10:00,21:00
AccuracySec=1h
Persistent=yes
[Install]
WantedBy=timers.target
答案1
是否可以通过在同一个计时器中声明它来使其在多个时刻运行?
是的。
看这段摘录来自man systemd.timer
(我的重点):
日历上= 使用日历事件表达式定义实时(即挂钟)计时器。有关日历事件表达式语法的更多信息,请参阅 systemd.time(7)。否则,语义类似于 OnActiveSec= 和相关设置。 请注意,计时器不一定会在使用此设置配置的精确时间到期,因为它受下面的 AccuracySec= 设置的约束。 可以指定多次。
这是我使用的一个工作示例:
[Timer]
OnCalendar=Mon-Sun *-*-* 23:00:00
OnCalendar=Mon-Sun *-*-* 06:00:00
答案2
虽然这篇文章有点老了,但我想指出的是,有几种方法可以在同一个计时器中声明它:
- 那个男人系统时间 规定:
每个组件都可以指定为以逗号分隔的值列表。
就您而言,由于只有一个组件发生变化,我建议使用此解决方案。您几乎已经知道了,逗号需要放置在相同组件的出现之间:
OnCalendar=10,21:00
- 那个男人systemd.定时器 解释说
OnCalendar=
:
可以指定多次,在这种情况下,只要任何指定的表达式过去,计时器单元就会触发。
如果多个组件发生变化,那么我建议使用第二种解决方案:
OnCalendar=Mon..Wen 10:00
OnCalendar=Thu..Fri 21:00