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