systemd定时器,断电后如何重新启动服务?

systemd定时器,断电后如何重新启动服务?

我正在体验 systemd 计时器,每天早上 7 点启动一项服务。该服务启动一个必须连续运行到晚上 10 点的应用程序。因此,如果应用程序崩溃,服务必须重新启动它。该服务在 10 点由 crontab 停止,这也会关闭系统。

我正在使用 OnCalendar 和 Persistent=true 的计时器,该计时器可以工作,但我无法确保如果在上午 7 点后断电(电源恢复后由 BIOS 重新启动系统),服务会启动,因为计时器已成功触发早上7点,所以要等到第二天..

我无法在启动时运行我的服务,因为如果系统可以在早上 7 点之前启动(夜间断电),那么服务也会启动,我不希望它在早上 7 点之前启动。

任何想法?

答案1

假设计时器是通过 OnCalendar 安排的,那么在此类错过的事件之后,计时器的最后运行状态是什么?这是输出的最后一列systemctl list-timers

如果它显示“n/a”,则计时器以前从未被触发过,或者它的上次运行状态已被清除,因此它不会在启动时运行。

答案2

我找到的当前解决方案是这样的..删除邮票文件在~/.local/share/systemd/timers.然后重新启动计时器。

[来源][1]“这些是零长度文件,标记每个计时器最后一次运行的时间。如果删除,它们将在下次启动计时器时重建。”

[1]:https://wiki.archlinux.org/index.php/Systemd/Timers

我以为我已经找到了解决方案,但后来意识到,当早上 7 点之后断电时,它不起作用......

答案3

看一下:

[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Run 120 seconds after boot for the first time
OnBootSec=120

相关内容