我一直在寻找如何创建一个pid文件来监控ubuntu中的upstart进程。我查看了Ubuntu, upstart, and creating a pid for monitoring中接受的答案,最后得到了以下代码:
env PROGRAM_NAME=myscript
env BASE_PATH=/bar/
respawn limit 5 30
script
${BASE_PATH}/bin/python ${BASE_PATH}/scripts/${PROGRAM_NAME}.py -e ${BASE_PATH}/foo.ini
end script
post-start script
echo PID=`status myscript | egrep -oi '([0-9]+)$' | head -n1`
echo $PID > /var/run/${PROGRAM_NAME}.pid
end script
post-stop script
rm -f /var/run/${PROGRAM_NAME}.pid
end script
我遇到了3个问题:
此代码以某种方式创建了两个进程。父进程(通过ps -ef | grep python检查)只是一个shell,如:
/bin/sh -e -c ${BASE_PATH}/bin/python ${BASE_PATH}/scripts/${PROGRAM_NAME}.py -e ${BASE_PATH}/foo.ini /bin/sh
虽然子进程有正确的替代品:
/bar/bin/python /bar/scripts/myscript.py -e /bar/foo.ini
pid文件包含实际进程的 parent 的pid。不是孩子的实际过程。
重生不起作用。我用kill pid
杀死子进程(也杀死了父进程,但反之亦然)。