我正在体验 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