Тут я не раз потрапляв, тому думав, що після використання відповідей тут я отримаю оновлену відповідь на основі власного досвіду. Особливо дякую @danorton та @orj за відповіді.
Цей сценарій був протестований на Upstart 1.5, який працює на Ubuntu 12.04 з Nginx 1.0.11 та Passenger 3.0.11. Якщо ви не використовуєте Пасажира, можливо, вам доведеться пограти з 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
здається, працює. За допомогою пасажира nginx створює 61 вилку. Для запуску потрібні 0, 1 або 2. Як натякнули інші, Upstart буде відслідковувати неправильний PID. Я також видалив, respawn
оскільки він нічого не робить, ймовірно, з тієї ж причини. Деякі додаткові сценарії до / після запуску, можливо, зможуть це виправити, захопивши реальний PID. Я, однак, використовую monit для обробки перезавантажень, тому це не потрібно.
Не використовуйте daemon off
. Це лише для розвитку. Дивіться http://wiki.nginx.org/CoreModule#daemon
Список літератури: