我在 /opt/xyz/bin/xyz 中有一个守护进程。不幸的是,它无法将自己分叉到后台,并且在接下来的半年内也无法这样做。我的问题如下:输入
service xyz start
刚刚返回
xyz start/running, process 23484
总是如此,即使它立即以退出代码 1 退出。我的配置是这样的:
$ cat /etc/init/xyz.conf
description "XYZ"
start on started networking
stop on shutdown
exec /opt/xyz/bin/xyz
其余工作正常。Upstart 可以识别进程何时启动,停止工作也正常。
有什么建议么?
答案1
您需要一个启动后节来查询服务是否正在提供预期运行的服务。因此,类似
post-start script
for try in 1 2 3 4 5 ; do
if xyzadmin --ping ; then
exit 0
fi
sleep 1
done
logger -t xyz-upstart -p daemon.err "failed to start within $try seconds, aborting"
exit 1
end script
当添加守护服务的能力时,如果可能的话,请确保它在准备好处理请求之前不会分叉,然后“期望分叉”将正确延迟“启动”条件,否则您仍然需要这个启动后条件。