Upstart 服务停止时不会终止进程

Upstart 服务停止时不会终止进程

我有一个新贵服务,它维护着许多工人的实例。

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 位。

相关内容