Это мой файл выскочки /etc/init/myapp.conf
:
description "Example of starting Node with Upstart and Forever"
start on filesystem or runlevel [2345]
stop on runlevel [06]
expect fork
console output
setuid lwood
env HOME=/home/lwood
env LOG="/home/lwood/myapp/applog.log"
script
cd $HOME
exec forever -a -l $LOG \
start /home/lwood/myapp/app.js
end script
pre-stop script
cd $HOME
exec forever stop /home/lwood/myapp/app.js >> $LOG
end script
Знаете ли вы, почему sudo restart myapp
только останавливает службу? Служба не запускается после ее остановки. Таким образом, он имеет тот же эффект, что и sudo stop myapp
.
Выполнение sudo stop myapp
, а затем sudo start myapp
работает нормально, хотя. Интересно, почему перезапуск ведет себя иначе.
Я нахожусь на Ubuntu 12.04.
Чтобы расширить ответ xdissent (который работал для меня), вот пример сценария, который вы можете разместить в /etc/init/tomcat-stop.conf
. Когда служба tomcat
останавливается, этот сценарий запускается и полностью завершает работу Tomcat, прежде чем Upstart перезапускает его.
description "Tomcat Server shutdown script"
setuid tomcat_user
setgid tomcat_group
chdir /usr/local/tomcat
start on stopping tomcat
kill timeout 30
script
exec bin/catalina.sh stop
end script
В upstart есть ошибка . Он все еще существует в Ubuntu Raring 13.04, но я еще не тестировал Saucy или более позднюю версию.
В принципе, pre-stop
следует избегать. Это вызывает неопределенные изменения состояния при перезапуске. Если вы используете его для запуска демона, как в вашем случае, он просто остановит все. В более классическом использовании даже указание скрипта pre-stop
предотвратит перезапуск вашего основного процесса (как показано в отчете об ошибке).
Поведение «при остановке» заданий кажется незатронутым, поэтому одним из решений является создание задания myapp-stop.conf
, которое запускается «при остановке myapp». Единственный очевидный недостаток заключается в том, что труднее узнать, когда все другие потенциально «на остановке myapp» работы завершены.