是否可以让 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=
设置。