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

Service Systemd-如果服务停止超过X次,请始终运行服务并重新启动,service,cron,systemd,yocto,Service,Cron,Systemd,Yocto,我需要一个持续运行的系统服务。所讨论的系统是由Yocto构建的嵌入式linux。 如果服务因任何原因(故障或刚刚完成)停止,则应自动重新启动 如果重新启动超过X次,系统应重新启动 有什么选择可以拥有这个?我可以想到以下两种,但两者似乎都不太理想 1) 拥有一个cron作业,它将执行上述检查,并将重试次数保留在/tmp或其他tmpf中的某个位置 2) 让服务本身跟踪它已启动的次数(再次在某些tmpfs位置),并在必要时重新启动。如果服务不运行,Systemd只需不断尝试启动服务 编辑:根据回答的建

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

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

编辑:根据回答的建议,我修改了服务以使用下面给出的
startImitAction
。它会使单元正确地重新启动,但在任何时候都不会重新启动系统,即使我不断地终止脚本:

[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

您的服务文件中的这一点应该与您的要求非常接近:

[Service]
Restart=always

[Unit]
StartLimitAction=reboot
StartLimitIntervalSec=60
StartLimitBurst=5
如果服务停止,它将重新启动服务,除非在60秒内重新启动超过5次:在这种情况下,它将重新启动


您可能还想查看
WatchdogSec
值,但此软件WatchdogSec功能需要服务本身的支持(虽然很容易添加,请参阅WatchdogSec文档)。

我的理解是,
Restart=
行应该位于
[service]
中,如示例所示


但是行
startImitxxxxx=
应该在
[Unit]

中,它似乎不起作用-我尝试过杀死脚本十几次,它确实重新启动了脚本,但它从未重新启动系统。我可能错过了什么。在最初的问题中添加了systemd单元,这对我很有用。