Sono finito qui più di una volta, quindi ho pensato di fornire una risposta aggiornata in base alla mia esperienza personale dopo aver utilizzato le risposte qui. Grazie soprattutto a @danorton e @orj per le loro risposte.
Questo script è stato testato su Upstart 1.5 in esecuzione su Ubuntu 12.04 con Nginx 1.0.11 e Passenger 3.0.11. Se non stai utilizzando Passenger, potresti dover giocare con la post-stoplinea. Consultare il libro di cucina Upstart.
In un vuoto /etc/init/nginx.confaggiungi le seguenti righe (puoi rimuovere i commenti se vuoi):
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
Ho preso lo script Upstart dal Wiki di Nginx e l'ho modificato in quanto un numero di righe non sono necessarie, causano confusione o non funzionano.
Potrebbe essere necessario modificare env DAEMONe le env PIDlinee a seconda di dove hai installato nginx e stai scrivendo il PID. Il PID può essere configurato in nginx.
Ho provato tutte le forme di expect. expect forkSembra solo funzionare. Con Passenger nginx crea 61 forchette. Upstart richiede 0, 1 o 2. Come altri hanno suggerito, Upstart seguirà il PID errato. Ho anche rimosso respawnin quanto probabilmente non fa nulla per lo stesso motivo. Alcuni script pre / post avvio aggiuntivi potrebbero essere in grado di risolverlo afferrando il vero PID. Tuttavia, utilizzo Monit per gestire i riavvii, quindi non ne ho bisogno.
Non usare daemon off. Questo è solo per lo sviluppo. Vedi http://wiki.nginx.org/CoreModule#daemon
Riferimenti: