Inizialmente avevo posto questa domanda su StackOverflow. Quindi ho capito che questo è probabilmente un posto migliore.
Ho impostato bluepill per monitorare i miei processi delayed_job. (Applicazione Ruby On Rails)
Usando Ubuntu 12.10.
Sto avviando e monitorando il servizio bluepill stesso usando Ubuntu upstart
. La mia configurazione iniziale è sotto ( /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
Ho anche provato con expect fork
invece di expect daemon
. Ho anche provato a rimuovere expect...
completamente la linea.
Quando la macchina si avvia, bluepill si avvia correttamente.
$ ps aux | grep blue
root 1154 0.6 0.8 206416 17372 ? Sl 21:19 0:00 bluepilld: <app_name>
Il PID del processo bluepill è 1154 qui. Ma upstart
sembra seguire il PID sbagliato. Tiene traccia di un PID che non esiste.
$ initctl status bluepill
bluepill start/running, process 990
Penso che stia monitorando il PID del sudo
processo che ha avviato il processo bluepill.
Questo impedisce al processo di bluepill di essere rigenerato se uccido con forza bluepill usando kill -9
.
Inoltre, penso che a causa del PID errato che viene rintracciato, il riavvio / arresto si blocca e devo reimpostare la macchina ogni volta.
Quale potrebbe essere il problema qui?
AGGIORNAMENTO :
Il problema persiste ad oggi (3 maggio 2015) su Ubuntu 14.04.2.
Il problema non è dovuto all'uso di sudo. Non sto più usando sudo. La mia configurazione upstart aggiornata è questa:
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
Quando la macchina si avvia, il programma si carica bene. Ma upstart tiene ancora traccia del PID errato, come descritto sopra.
La soluzione alternativa menzionata nei commenti potrebbe risolvere il problema impiccagione. Non l'ho provato, però.
ps aux | grep 990
dovrebbe farlo, mapstree 990
potrebbe essere più informativo.