我需要一个持续运行的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
答案 0 :(得分:1)
这在你的服务文件中应该做的非常接近你的要求:
Restart=always
StartLimitAction=reboot
StartLimitIntervalSec=60
StartLimitBurst=5
如果服务停止,它将重新启动服务,除非在60秒内重启超过5次:在这种情况下它会重启。
您可能还需要查看WatchdogSec
值,但此软件监视功能需要服务本身的支持(非常容易添加,请参阅WatchDogSec的文档)。
答案 1 :(得分:1)
我的理解是 Restart=
行应该在 [Service]
中,如示例中所示
但行 StartLimitxxxxx=
应该在 [Unit]
中。