![systemd 仅在崩溃后自动重新启动服务](https://linux22.com/image/143169/systemd%20%E4%BB%85%E5%9C%A8%E5%B4%A9%E6%BA%83%E5%90%8E%E8%87%AA%E5%8A%A8%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1.png)
是否可以让 systemd 仅在服务不返回 0 的情况下自动重新启动该服务?据我所知,当发生正确的结束时,服务返回 0 - 例如,当用户主动终止服务(例如关闭程序)时。我很想告诉 systemd 在手动终止服务时不要重新启动该服务。那可能吗?
答案1
Restart=on-failure
是的,您可以在单位区域内使用Service
。
从systemd 的文档(也可在man 5 systemd.service
):
重新启动=
[...]
如果设置为
on-failure
,则当进程以非零退出代码退出、被信号终止(包括核心转储,但不包括上述四个信号)、当操作(例如服务重新加载)次数时,服务将重新启动出,以及何时触发配置的看门狗超时。如果设置为on-abnormal,则当进程被信号终止时(包括core dump,不包括上述四个信号)、操作超时或触发看门狗超时时,服务将重新启动。[...]
对于长时间运行的服务,建议选择将此设置为
on-failure
,以便通过尝试从错误中自动恢复来提高可靠性。对于能够自行选择终止(并避免立即重新启动)的服务,on-abnormal
是另一种选择。
顺便说一句,您可以使用 明确告诉 systemd 停止服务systemctl stop
,而不是当前手动终止进程的方法,这将绕过任何Restart=
设置。