Pierwotnie zadałem to pytanie na StackOverflow. Potem zdałem sobie sprawę, że jest to prawdopodobnie lepsze miejsce.
Mam konfigurację bluepill do monitorowania moich opóźnionych procesów. (Aplikacja Ruby On Rails)
Korzystanie z Ubuntu 12.10.
Uruchamiam i monitoruję samą usługę bluepill przy użyciu Ubuntu upstart
. Moja konfiguracja upstart jest poniżej ( /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
Próbowałem też z expect fork
zamiast expect daemon
. Próbowałem też expect...
całkowicie usunąć linię.
Po uruchomieniu maszyny bluepill uruchamia się dobrze.
$ ps aux | grep blue
root 1154 0.6 0.8 206416 17372 ? Sl 21:19 0:00 bluepilld: <app_name>
PID procesu bluepill wynosi tutaj 1154. Ale upstart
wydaje się, że śledzi niewłaściwy PID. Śledzi PID, który nie istnieje.
$ initctl status bluepill
bluepill start/running, process 990
Myślę, że śledzi PID sudo
procesu, który rozpoczął proces bluepill.
Zapobiega to odrodzeniu się procesu bluepill, jeśli siłą zabiję go za pomocą kill -9
.
Co więcej, myślę, że z powodu śledzenia niewłaściwego PID, restart / wyłączenie po prostu zawiesza się i muszę za każdym razem mocno resetować maszynę.
Co może być tutaj problemem?
AKTUALIZACJA :
Problem pozostaje na dzień dzisiejszy (3 maja 2015 r.) W systemie Ubuntu 14.04.2.
Problem nie wynika z używania sudo. Nie używam już sudo. Moja zaktualizowana konfiguracja upstart to:
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
Po uruchomieniu komputera program ładuje się dobrze. Ale upstart nadal śledzi niewłaściwy PID, jak opisano powyżej.
Obejście wspomniane w komentarzach może rozwiązać problem z zawieszaniem się. Jednak tego nie próbowałem.
ps aux | grep 990
powinien to zrobić, alepstree 990
może być bardziej pouczający.