Ich habe diese Frage ursprünglich bei StackOverflow gestellt. Dann wurde mir klar, dass dies wahrscheinlich ein besserer Ort ist.
Ich habe ein Bluepill-Setup, um meine Prozesse mit verzögertem Job zu überwachen. (Ruby On Rails-Anwendung)
Verwenden von Ubuntu 12.10.
Ich starte und überwache den Bluepill-Dienst selbst mit Ubuntus upstart
. Meine Upstart-Konfiguration ist unten ( /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
Ich habe es auch mit expect fork
statt versucht expect daemon
. Ich habe auch versucht, die expect...
Linie vollständig zu entfernen .
Wenn die Maschine startet, startet Bluepill einwandfrei.
$ ps aux | grep blue
root 1154 0.6 0.8 206416 17372 ? Sl 21:19 0:00 bluepilld: <app_name>
Die PID des Bluepill-Prozesses beträgt hier 1154. Aber upstart
scheint die falsche PID - Tracking zu werden. Es verfolgt eine PID, die nicht existiert.
$ initctl status bluepill
bluepill start/running, process 990
Ich denke, es verfolgt die PID des sudo
Prozesses, der den Bluepill-Prozess gestartet hat.
Dies verhindert, dass der Bluepill-Prozess erneut ausgeführt wird, wenn ich Bluepill mit Gewalt töte kill -9
.
Außerdem denke ich, dass der Neustart / das Herunterfahren aufgrund der falschen PID, die verfolgt wird, nur hängt und ich die Maschine jedes Mal hart zurücksetzen muss.
Was könnte hier das Problem sein?
UPDATE :
Das Problem bleibt ab heute (3. Mai 2015) unter Ubuntu 14.04.2 bestehen.
Das Problem liegt nicht an der Verwendung von sudo. Ich benutze kein Sudo mehr. Meine aktualisierte Upstart-Konfiguration lautet wie folgt:
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
Wenn der Computer startet, wird das Programm einwandfrei geladen. Upstart verfolgt jedoch immer noch die falsche PID, wie oben beschrieben.
Die in den Kommentaren erwähnte Problemumgehung kann das Problem beim Aufhängen beheben. Ich habe es aber nicht versucht.
ps aux | grep 990
sollte es tun,pstree 990
könnte aber informativer sein.