Я изначально задавал этот вопрос на StackOverflow. Потом понял, что это, наверное, лучшее место.
У меня есть настройка bluepill для мониторинга моих процессов delayed_job. (Приложение Ruby On Rails)
Использование Ubuntu 12.10.
Я запускаю и отслеживаю сам сервис bluepill с помощью Ubuntu upstart
. Моя выскочка конфигурации ниже ( /etc/init/bluepill.conf
).
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
expect daemon
exec sudo /home/deploy/.rvm/wrappers/<app_name>/bluepill load /home/deploy/websites/<app_name>/current/config/server/staging/delayed_job.bluepill
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
Я также пытался с expect fork
вместо expect daemon
. Я также попытался удалить expect...
линию полностью.
Когда машина загружается, bluepill запускается нормально.
$ ps aux | grep blue
root 1154 0.6 0.8 206416 17372 ? Sl 21:19 0:00 bluepilld: <app_name>
PID процесса bluepill здесь 1154. Но, upstart
кажется, отслеживает неправильный PID. Он отслеживает PID, который не существует.
$ initctl status bluepill
bluepill start/running, process 990
Я думаю, что это отслеживает PID sudo
процесса, который запустил процесс bluepill.
Это предотвращает возрождение процесса bluepill, если я принудительно убью bluepill с помощью kill -9
.
Более того, я думаю, что из-за неправильного отслеживания PID перезагрузка / завершение работы просто зависает, и мне приходится каждый раз выполнять полную перезагрузку машины.
В чем может быть проблема здесь?
ОБНОВЛЕНИЕ :
Проблема остается на сегодня (3 мая 2015 года) на Ubuntu 14.04.2.
Проблема не в использовании sudo. Я больше не использую sudo. Моя обновленная конфигурация выскочки:
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
expect daemon
script
shared_path=/home/deploy/websites/some_app/shared
bluepill load $shared_path/config/delayed_job.bluepill
end script
Когда машина загружается, программа загружается нормально. Но выскочка все еще отслеживает неправильный PID, как описано выше.
Обходной путь, упомянутый в комментариях, может исправить проблему зависания. Я не пробовал, хотя.
ps aux | grep 990
должен сделать это, ноpstree 990
может быть более информативным.