我正在使用一项服务,但它意外终止(停止)。我想让它无论如何停止都自动重新启动!它已配置Restart=on-abort
且未重新启动。我没有编写该服务,它来自另一个供应商,因此虽然我想追踪服务崩溃的根本原因,但我还需要一个解决方案来保持系统运行,直到找到根本原因。该服务每天会死掉零到三次,所以不会太频繁。
当前服务设置为Restart=on-abort
服务文件中定义的/etc/systemd/system/someone-elses.service
那么是什么Restart=on-abort
意思呢?
我进行了搜索并了解 restart= 的不同值的含义,但在手册页中找不到任何内容:
答案1
systemd.service 可以配置为根据多种条件重新启动服务。 这个 systemctl 手册页对原因有很好的解释,并且原因包含在这个答案中,因此这个答案可以独立存在。
的定义Restart=on-abort
是 仅当服务进程因未捕获的信号未指定为干净退出状态而退出时,服务才会重新启动。 这意味着除 SIGHUP、SIGINT、SIGTERM 或 SIGPIPE 之外的信号。这 4 个信号被描述为干净的信号通过 systemctl 手册页。
就我而言,我实际上想要,Restart=always
因为无论进程如何终止或退出,我都希望它重新启动。该属性RestartSec=15s
对我来说很重要,因为我希望在重新启动之间有一段时间以防止持续重新启动(我不希望发生这种情况,但这就是我有此设置的原因)。
以下摘自systemctl 手册页并格式化为SO:
重新启动=值可以是
no
、on-success
、on-failure
、on-abnormal
、on-watchdog
、on-abort
、 或always
。
接下来解释每个值:
不(默认值) - 如果设置为
no
服务将不会重新启动。成功- 如果设置为
on-success
,只有当服务进程干净退出时才会重新启动。在这种情况下,干净退出意味着退出代码为 0,或者信号 SIGHUP、SIGINT、SIGTERM 或 SIGPIPE 之一,另外还包括 SuccessExitStatus= 中指定的退出状态和信号。故障时- 如果设置为
on-failure
,当进程以非零退出代码退出、被信号终止(包括核心转储,但不包括上述四个信号)、操作(例如服务重新加载)时,服务将重新启动超时,以及何时触发配置的看门狗超时。异常状态- 如果设置为
on-abnormal
,则当进程被信号终止(包括核心转储,不包括上述四个信号)、操作超时或触发看门狗超时时,服务将重新启动。中止时- 如果设置为
on-abort
,则仅当服务进程由于未指定为干净退出状态的未捕获信号而退出时,服务才会重新启动。如果设置为 on-watchdog,则仅当服务的 watchdog 超时到期时,服务才会重新启动。总是- 如果设置为
always
,则无论服务是否干净退出、是否因信号异常终止或超时,服务都将重新启动。
另请参阅这个精彩的答案! https://unix.stackexchange.com/a/507917/119816