如果 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