Systemd - 如果服务停止超过X次,则始终运行并重新启动服务

时间:2017-01-28 10:24:13

标签: service cron systemd yocto

我需要一个持续运行的systemd服务。有问题的系统是由Yocto构建的嵌入式Linux。 如果服务因任何原因(故障或刚刚完成)停止,则应自动重新启动 如果重启超过X次,系统应重新启动。

有什么选择呢?我可以想到以下两点,但两者似乎都不是最理想的 1)有一个cron作业,它将完成上面的检查,并在/ tmp或其他tmpfs中的某处保留重试次数 2)让服务本身跟踪它已启动的次数(再次在某些tmpfs位置)并在必要时重新启动。如果服务没有运行,Systemd只需要不断尝试启动服务

编辑:根据答案的建议,我修改了服务以使用下面给出的StartLimitAction。它会导致设备正确重启,但在任何时候它都不会重启系统,即使我不断杀死该脚本:

[Unit]
Description=myservice system

[Service]
Type=simple
WorkingDirectory=/home/root
ExecStart=/home/root/start_script.sh

Restart=always
StartLimitAction=reboot
StartLimitIntervalSec=600
StartLimitBurst=5

[Install]
WantedBy=multi-user.target

2 个答案:

答案 0 :(得分:1)

这在你的服务文件中应该做的非常接近你的要求:

Restart=always
StartLimitAction=reboot
StartLimitIntervalSec=60
StartLimitBurst=5

如果服务停止,它将重新启动服务,除非在60秒内重启超过5次:在这种情况下它会重启。

您可能还需要查看WatchdogSec值,但此软件监视功能需要服务本身的支持(非常容易添加,请参阅WatchDogSec的文档)。

答案 1 :(得分:1)

我的理解是 Restart= 行应该在 [Service] 中,如示例中所示

但行 StartLimitxxxxx= 应该在 [Unit] 中。