Ich bin mehr als einmal hier gelandet und dachte, ich würde eine aktualisierte Antwort basierend auf meinen eigenen Erfahrungen geben, nachdem ich die Antworten hier verwendet habe. Vielen Dank insbesondere an @danorton und @orj für ihre Antworten.
Dieses Skript wurde unter Upstart 1.5 unter Ubuntu 12.04 mit Nginx 1.0.11 und Passenger 3.0.11 getestet. Wenn Sie Passenger nicht verwenden, müssen Sie möglicherweise mit der post-stop
Linie herumspielen. Weitere Informationen finden Sie im Upstart-Kochbuch.
Fügen /etc/init/nginx.conf
Sie in einem leeren Feld die folgenden Zeilen hinzu (Sie können die Kommentare entfernen, wenn Sie möchten):
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
Ich habe das Upstart-Skript aus dem Nginx-Wiki genommen und es optimiert, da einige Zeilen nicht benötigt werden, Verwirrung stiften oder nicht funktionieren.
Je nachdem, wo Sie nginx installiert haben und die PID schreiben, müssen Sie möglicherweise Änderungen env DAEMON
und env PID
Zeilen vornehmen. Die PID kann in Nginx konfiguriert werden.
Ich habe alle Formen von ausprobiert expect
. Nur expect fork
scheint zu funktionieren. Mit Passenger erstellt nginx 61 Gabeln. Upstart erfordert 0, 1 oder 2. Wie andere angedeutet haben, verfolgt Upstart die falsche PID. Ich habe auch entfernt, respawn
da es wahrscheinlich aus dem gleichen Grund nichts tut. Einige zusätzliche Skripte vor / nach dem Start können dies möglicherweise beheben, indem sie die tatsächliche PID abrufen. Ich verwende jedoch monit, um Neustarts durchzuführen, brauche es also nicht.
Nicht verwenden daemon off
. Dies ist nur für die Entwicklung. Siehe http://wiki.nginx.org/CoreModule#daemon
Verweise: