Ich habe ein Upstart-Skript geschrieben, um einen Daemon in einer tmux-Sitzung zu starten. Es funktioniert gut und startet den Prozess neu, wenn es unerwartet stirbt, aber ich kann es anscheinend nicht manuell stoppen.
Der Job (Bukkit genannt) sieht folgendermaßen aus:
start on filesystem
stop on runlevel [!2345]
respawn
respawn limit 5 30
chdir /home/minecraft/bukkit
expect daemon
kill timeout 30
pre-start script
test -x /home/minecraft/bukkit/craftbukkit-0.0.1-SNAPSHOT.jar || { stop; exit 0; }
end script
pre-stop script
tmux send -t bukkit "stop"
tmux send -t bukkit "Enter"
sleep 10 # Wait for server to shut down properly
end script
exec tmux new-session -d -s minecraft -n bukkit "sudo -u minecraft -- /home/minecraft/java/jre1.6.0_27/bin/java -Xincgc -Xmx1G -jar /home/minecraft/bukkit/craftbukkit-0.0.1-SNAPSHOT.jar"
Wenn ich ein ausstelle stop bukkit
, friert es für ~ 10 Sekunden ein (der Sleep-Timer, denke ich) und druckt bukkit start/running, process 2391
. Als ich upstart zum Debuggen einrichtete, fand ich diese relevanten Zeilen im Protokoll:
Sep 21 19:14:59 cheftest init: bukkit goal changed from start to stop
Sep 21 19:14:59 cheftest init: bukkit main process (2499) exited normally
Sep 21 19:14:59 cheftest init: bukkit main process ended, respawning
Sep 21 19:14:59 cheftest init: bukkit goal changed from stop to respawn
Warum startet upstart meinen Prozess immer wieder neu, wenn er ihn stoppen soll?
Für den Fall, dass jemand anderes hier auftaucht, habe ich einen funktionierenden Patch für den Fehler eingereicht:
https://bugs.launchpad.net/upstart/+bug/568288/comments/6
quelle
In Upstart 1.10 wurde ein Fix für dieses Problem veröffentlicht. Jetzt sollte es also nicht mehr passieren.
quelle