Je me suis retrouvé ici plus d'une fois, alors j'ai pensé fournir une réponse mise à jour basée sur ma propre expérience après avoir utilisé les réponses ici. Merci particulièrement à @danorton et @orj pour leurs réponses.
Ce script a été testé sur Upstart 1.5 exécuté sur Ubuntu 12.04 avec Nginx 1.0.11 et Passenger 3.0.11. Si vous n'utilisez pas Passenger, vous devrez peut-être jouer avec la post-stop
ligne. Reportez-vous au livre de recettes Upstart.
Dans un espace vide, /etc/init/nginx.conf
ajoutez les lignes suivantes (vous pouvez supprimer les commentaires si vous le souhaitez):
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
J'ai pris le script Upstart du wiki Nginx et l'ai modifié car un certain nombre de lignes ne sont pas nécessaires, provoquent de la confusion ou ne fonctionnent pas.
Vous devrez peut-être modifier env DAEMON
et env PID
lignes en fonction de l'endroit où vous avez installé nginx et écrivez le PID. Le PID peut être configuré dans nginx.
J'ai essayé toutes les formes de expect
. expect fork
Semble seulement fonctionner. Avec Passenger, nginx crée 61 fourches. Upstart nécessite 0, 1 ou 2. Comme d'autres l'ont laissé entendre, Upstart suivra le mauvais PID. J'ai également supprimé respawn
car il ne fait probablement rien pour la même raison. Certains scripts supplémentaires avant / après démarrage peuvent résoudre ce problème en saisissant le vrai PID. Cependant, j'utilise monit pour gérer les redémarrages, donc je n'en ai pas besoin.
Ne pas utiliser daemon off
. C'est uniquement pour le développement. Voir http://wiki.nginx.org/CoreModule#daemon
Références: