Я написал сценарий запуска для запуска демона в сеансе tmux. Он работает хорошо и заново запускает процесс, если неожиданно умирает, но я не могу остановить его вручную.
Работа (называется Bukkit) выглядит следующим образом:
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"
Когда я выпускаю, stop bukkit
он останавливается на ~ 10 секунд (я полагаю, таймер сна) и печатает bukkit start/running, process 2391
. Когда я настроил upstart для отладки, я нашел следующие соответствующие строки в журнале:
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
Почему выскочка продолжает возрождать мой процесс, когда он должен его остановить?
На случай, если кто-нибудь еще окажется здесь, я отправил исправление для исправления ошибки:
https://bugs.launchpad.net/upstart/+bug/568288/comments/6
источник
Исправление было выпущено в upstart 1.10 для этого, так что теперь это не должно произойти.
источник