我有一个新贵服务,它维护着许多工人的实例。
pm-all-workers.conf:
start on runlevel [2345]
stop on runlevel [!2345]
env NUM_WORKERS=25
pre-start script
for i in `seq 1 $NUM_WORKERS`
do
start pm-worker N=$i
done
end script
pm-worker.conf:
start on runlevel [2345]
stop on stopping pm-all-workers
instance $N
respawn
respawn limit 10 5
umask 022
exec su - someuser -c "/home/someuser/bin/worker.bin"
一直运行良好,但最近即使服务停止,一些工作进程仍会继续运行。我的理解是,upstart 会在停止时向进程发送 SIGTERM,然后在几秒钟后发送 SIGKILL(如果进程仍在运行)。
有些进程怎么可能没有被终止?我可以用 手动终止进程pkill -9 worker.bin
。
答案1
可能 Upstart 向 su 发送了 SIGTERM/KILL,而不是您的 worker.bin。请尝试使用 upstart 的 setuid 节并删除 su 位。