我们有一个相当复杂的系统服务Type=notify
。非常偶尔,服务会在启动/重启时挂起,进入failed
systemd接听失败后的状态sd_notify
。在这些情况下,我们希望重新启动服务 - 很可能,第二次它会正确启动。
但是,systemd.service(5)手册页说:
当进程死亡是由于 systemd 操作(例如服务停止或重新启动)而导致的,服务将不会重新启动。
有没有办法克服 systemd 配置中的这个限制?否则我们将不得不监控守护进程的状态并在每次卡住时手动重新启动它,或者为此开发某种主管脚本,这可能会在系统中引入更多故障点。
不,没有可能。
这是一种安全措施,可避免在手动干预后配置文件损坏的情况下进程进入重启边缘。
有 Restart= 选项,但要使其正常工作,该过程必须先启动一次。
因此,对您来说更好的方法是检查为什么您的服务有时会在启动或重新启动时挂起并解决此问题。
如果您无法这样做,您可以编写一个带有无限循环的简单 shell 包装器来启动服务,或者设置一个服务监控程序(如 Monit)的本地实例可能会更好。