Назад | Перейти на главную страницу

Сервис Upstart не убивает процессы на остановке

У меня есть служба выскочки, которая поддерживает несколько экземпляров рабочих.

pm-all-worker.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"

Это работает нормально, но в последнее время некоторые рабочие процессы продолжают зависать, даже если служба остановлена. Насколько я понимаю, выскочка отправит SIGTERM процессам при остановке, а затем через несколько секунд SIGKILL, если процесс все еще запущен.

Как это возможно, что некоторые процессы не будут убиты? Я могу убить процессы вручную с помощью pkill -9 worker.bin.

Возможно, Upstart отправляет su сообщение SIGTERM / KILL вместо вашего worker.bin. Попробуйте использовать строфу setuid для upstart и удалить бит su.