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-stop
línea. Consulte el libro de cocina Upstart.
En un espacio vacío, /etc/init/nginx.conf
agregue 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 DAEMON
y env PID
dependiendo 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 fork
parece 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 respawn
ya 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