1

我一直在寻找如何创建一个 pid 文件来监视 ubuntu 中的新贵进程。我查看了Ubuntu、upstart 中接受的答案,并创建了一个用于监控的 pid,最终得到以下代码:

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个问题:

  1. 不知何故,这段代码创建了两个进程。父进程(通过 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        
    
  2. pid 文件包含实际进程的父进程的 pid。不是孩子,这是实际的过程。

  3. 重生不起作用。我杀死了子进程kill pid(它也杀死了父进程,但反之亦然)。

4

0 回答 0