upstart 是否有内置方法来重新启动未在特定时间间隔内使用 initctl stop 停止的进程?

upstart 是否有内置方法来重新启动未在特定时间间隔内使用 initctl stop 停止的进程?

我们认为以下指令将在 60 秒内尝试重启该进程 10 次(即每 6 秒一次):

respawn
respawn limit 10 60

但是这些指令会在进程崩溃后立即重新启动进程。因此它实际上可能在 1 秒内重生进程 10 次。

有没有办法配置我们的服务,以便当它崩溃时,它会尝试重生 10 次,每 6 秒一次?

答案1

Ubuntu Upstart Cookbook 有一个答案为了这:

如果某项作业指定了重生,但是您由于某种原因想要延迟重生,则只需使用后停止节:

respawn
exec mydaemon
post-stop exec sleep 10

现在,每次 mydaemon 以非零返回码退出时,该作业将休眠 10 秒,然后 Upstart 重新启动它。

对于真正的服务,您可能会使用停止后脚本节来执行检查,而不是简单地休眠。

说实话,我不确定是否以及为什么停止后仅在非零作业退出代码时调用,但这是手册建议的解决方案。您可以随时使用post-start script并添加检查以使其成为sleep ...条件。

相关内容