У меня есть служба выскочки, которая поддерживает несколько экземпляров рабочих.
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.