systemd 仅在崩溃后自动重启服务

bej*_*ejo 6 linux systemd

只有当服务没有返回 0 时,才可以让 systemd 自动重启服务吗?据我所知,当发生正确的结束时,服务返回 0 - 比如用户主动终止服务时,如关闭程序。我很想告诉 systemd 不要重启服务,当它被手动终止时。那可能吗?

Chr*_*own 5

是的,您可以Restart=on-failure在单位Service部分内使用。

来自systemd 的文档(也可在man 5 systemd.service):

重启=

[...]

如果设置为on-failure,当进程以非零退出代码退出时,服务将重新启动,由信号终止(包括核心转储,但不包括上述四个信号),当操作(例如服务重新加载)次数out,以及触发配置的看门狗超时时。如果设置为on-abnormal,当进程被信号终止(包括on core dump,不包括上述四个信号)、操作超时或看门狗超时触发时,服务将重新启动。

[...]

将此设置on-failure为长期运行的服务的推荐选择,以通过尝试从错误中自动恢复来提高可靠性。对于能够自行选择终止(并避免立即重新启动)的服务,on-abnormal是另一种选择。

顺便说一句,您可以使用 明确告诉 systemd 停止服务,而不是您当前手动终止进程的方法systemctl stop,这将绕过任何Restart=设置。