Skończyłem tu więcej niż raz, więc pomyślałem, że po skorzystaniu z tych odpowiedzi przedstawię zaktualizowaną odpowiedź na podstawie własnego doświadczenia. Dzięki szczególnie dla @danorton i @orj za odpowiedzi.
Ten skrypt został przetestowany na Upstart 1.5 działającym na Ubuntu 12.04 z Nginx 1.0.11 i Passenger 3.0.11. Jeśli nie używasz Pasażera, być może będziesz musiał pobawić się post-stop
linią. Patrz książka kucharska Upstart.
/etc/init/nginx.conf
Dodaj puste wiersze (możesz usunąć komentarze, jeśli chcesz):
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
Wziąłem skrypt Upstart z Wiki Nginx i poprawiłem go, ponieważ wiele linii nie jest potrzebnych, powoduje zamieszanie lub nie działa.
Może zajść potrzeba zmiany env DAEMON
i env PID
linii w zależności od tego, gdzie zainstalowałeś nginx i zapisujesz PID. PID można skonfigurować w nginx.
Próbowałem wszystkich form expect
. Tylko expect fork
wydaje się działać. Z Passenger nginx tworzy 61 widelców. Upstart wymaga 0, 1 lub 2. Jak sugerowali inni, Upstart będzie śledził zły PID. Usunąłem również, respawn
ponieważ prawdopodobnie nie robi nic z tego samego powodu. Niektóre dodatkowe skrypty przed / po uruchomieniu mogą to naprawić, chwytając prawdziwy PID. Ja jednak używam monitora do obsługi restartów, więc nie potrzebuję tego.
Nie używać daemon off
. To jest tylko dla rozwoju. Zobacz http://wiki.nginx.org/CoreModule#daemon
Bibliografia: