如果 upstart 作业启动失败,如何返回非零值?

如果 upstart 作业启动失败,如何返回非零值?

如果 upstart 作业第一次启动失败,我该如何返回非零值?我怀疑 respawn 可能是罪魁祸首,但也可能不是。

我想要重生的原因是因为 myscript.py 是一个可能由于两个不同原因而退出的服务:

  • 配置错误。(启动失败)
  • 处理数据时发生意外异常。(运行时失败)

因此,如果可能的话,我非常希望保留第二种行为,而不要第一种行为。

description "MyJob"

respawn

start on runlevel [2345]
stop on runlevel [!2345]

script
    exec python /usr/local/bin/myscript.py
end script

无论如何,如果当脚本在小窗口内退出时初始重启或启动命令返回非零,我可以忍受双重行为。

我怎样才能做到这一点?

答案1

我想到了。

description "MyJob"

respawn

# retry 4 times in 3 seconds
# This should ALWAYS be true:
# 4 times * sleep .5 < 3 sec
# Otherwise it will continue respawning forever
respawn limit 4 3

start on runlevel [2345]
stop on runlevel [!2345]

script
    exec python /usr/local/bin/myscript.py
end script

post-start script
    # Time after starting service should unquestionably be running
    sleep .5
    if ps fax | grep '[m]yscript' ; then
        exit 0
    fi
    exit 1
end script

相关内容