Я оказывался здесь несколько раз, поэтому решил использовать обновленный ответ, основываясь на своем собственном опыте, после использования ответов здесь. Большое спасибо @danorton и @orj за их ответы.
Этот скрипт был протестирован на Upstart 1.5, работающем в Ubuntu 12.04 с Nginx 1.0.11 и Passenger 3.0.11. Если вы не используете Passenger, вам, возможно, придется поиграть с post-stop
линией. Обратитесь к поваренной книге Upstart.
В пустую /etc/init/nginx.conf
добавьте следующие строки (Вы можете удалить комментарии, если хотите):
description "nginx http daemon"
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]
env DAEMON=/usr/local/nginx/sbin/nginx
env PIDFILE=/var/run/nginx.pid
# Needed to allow Nginx to start, however, the wrong PID will be tracked
expect fork
# Test the nginx configuration (Upstart will not proceed if this fails)
pre-start exec $DAEMON -t
# Ensure nginx is shutdown gracefully
# Upstart will be tracking the wrong PID so the following is needed to stop nginx
post-stop exec start-stop-daemon --stop --pidfile $PIDFILE --name nginx --exec $DAEMON --signal QUIT
# Start Nginx
exec $DAEMON
Я взял скрипт Upstart из Nginx Wiki и настроил его, так как ряд строк не нужен, вызывает путаницу или не работает.
Возможно, вам придется изменить env DAEMON
и env PID
строки в зависимости от того, где вы установили nginx и пишете PID. PID может быть настроен в nginx.
Я перепробовал все формы expect
. Только expect fork
кажется, что работает. С Passenger nginx создает 61 вилку. Upstart требует 0, 1 или 2. Как подсказали другие, Upstart будет отслеживать неправильный PID. Я также удалил, respawn
поскольку это ничего не делает, вероятно, по той же причине. Некоторые дополнительные скрипты pre / post-start могут исправить это, взяв настоящий PID. Я, однако, использую monit для обработки перезапусков, поэтому мне это не нужно.
Не используйте daemon off
. Это только для разработки. Смотрите http://wiki.nginx.org/CoreModule#daemon
Ссылки: