systemd - 模仿 anacron 行为的计时器单元

systemd - 模仿 anacron 行为的计时器单元

我需要为经常关闭的机器编写一个计时器单元(例如经典的桌面设置)。该计时器单元需要定期激活,但不是很频繁(例如每周、每月)。

我确实找到了一些方法,但它们都不适合:

  • 根据手册页,如果配置的时间点是过去的,则仅激活OnBootSec和 指令。OnStartupSec我还发现了一些使用这些组合来OnActiveSec定义常规事件的示例。问题是:每次机器启动时,计时器都会激活配置的单元。如果你有一个应该每周/每月运行一次的计时器,那就太频繁了。例如:我不想让我的日志每天轮换三次!

  • 解决方案与OnCalendar指令。如果机器在配置的时间点(主要是午夜,因为如果您在时间规范中省略了小时,则默认为 00:00:00)关闭电源,则下次启动后将不会激活计时器。至少我是这样得到的。是对的吗?

如果配置的时间是过去的时间,带有日历事件的计时器是否会在下次启动后立即激活?如果没有,是否有解决方法可以实现这种行为?

答案1

该功能已经实施的在 systemd (ver >= 212) 中使用Persistent=指令,因此您只需在使用指令建立运行作业的日期/时间时插入Persistent=true单元文件即可。OnCalendar=

持久=

采用布尔参数。如果为 true,则上次触发服务单元的时间将存储在磁盘上。当定时器被激活时,如果服务单元在定时器不活动期间至少被触发一次,则服务单元被立即触发。这对于在机器关闭时弥补错过的服务运行很有用。请注意,此设置仅对使用 OnCalendar= 配置的计时器有效。

答案2

根据在 systemd-devel 邮件列表上发送电子邮件所需的行为已在路线图上,并将在将来添加。

相关内容