Terminé aquí más de una vez, así que pensé en proporcionar una respuesta actualizada basada en mi propia experiencia después de usar las respuestas aquí. Gracias especialmente a @danorton y @orj por sus respuestas.
Este script ha sido probado en Upstart 1.5 que se ejecuta en Ubuntu 12.04 con Nginx 1.0.11 y Passenger 3.0.11. Si no está utilizando Passenger, es posible que deba jugar con la post-stoplínea. Consulte el libro de cocina Upstart.
En un espacio vacío, /etc/init/nginx.confagregue las siguientes líneas (puede eliminar los comentarios si lo desea):
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
Tomé el script Upstart del Nginx Wiki y lo ajusté porque no se necesitan varias líneas, causan confusión o no funcionan.
Es posible que deba modificar las líneas env DAEMONy env PIDdependiendo de dónde haya instalado nginx y esté escribiendo el PID. El PID se puede configurar en nginx.
Intenté todas las formas de expect. Solo expect forkparece funcionar. Con Passenger nginx crea 61 tenedores. Upstart requiere 0, 1 o 2. Como otros han insinuado, Upstart rastreará el PID incorrecto. También he eliminado respawnya que probablemente no hace nada por la misma razón. Algunos scripts adicionales previos / posteriores al inicio pueden solucionarlo agarrando el PID real. Sin embargo, yo uso monit para manejar reinicios, así que no lo necesito.
No utilice daemon off. Esto es solo para desarrollo. Ver http://wiki.nginx.org/CoreModule#daemon
Referencias