Antecedentes:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
He creado nginx, y me gustaría utilizar el sistema de arranque para iniciarlo:
nginx script de inicio desde el sitio:
description "nginx http daemon"
start on runlevel 2
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
console owner
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
respawn
Recibo un "trabajo desconocido" cuando intento usar initctl para ejecutarlo, lo que acabo de enterar aparentemente significa que hay un error (¿qué hay de malo en "Error" para describir los errores?)
Alguien me puede apuntar en la dirección correcta ? He leído la documentación, tal como está, y parece un poco escasa para un reemplazo de inicio de SysV ... pero lo que sea que necesite agregar este trabajo a la lista, ejecutarlo y continuar con lo que queda de mi vida. .. ¿Algun consejo?
EDITAR: initctl version init (upstart 0.6.5)
ubuntu
upstart
ubuntu-10.04
chiggsy
fuente
fuente
Respuestas:
No puede tener varias
stop on
directivas en una descripción de trabajo de inicio para Upstart> = 0.5.Y
console owner
probablemente no sea lo que desea (esto hace que nginx sea el propietario de la consola del sistema).Tratar:
fuente
man 5 init
daemon off
opción es solo para desarrollo.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):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
yenv 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
. Soloexpect 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 eliminadorespawn
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#daemonReferencias
fuente
daemon off;
manera que la nueva versión admita el proceso / PID correcto sin la necesidad de las directivasexpect fork
opost-stop
. La sección wiki que describe la opción daemon también dice "Puede usar el demonio de forma segura en modo de producción con runit / daemontools, sin embargo, no puede hacer una actualización elegante", lo que supongo se refiere a la actualización a un nuevo binario en el característica de vuelo .No puedes Al menos no correctamente, de todos modos.
Nginx no genera su demonio en una de las dos formas que requiere el arranque, ya sea a través de "esperar tenedor" o "esperar demonio", por lo que el arranque no puede rastrear el proceso maestro nginx. Hay algunos hacks, pero tienen sus propios problemas.
Si está de acuerdo con el hecho de que el advenedizo no puede realizar un seguimiento del proceso maestro y matarlo en el apagado, esto funcionará:
fuente
expect daemon
hace que el arranque se bloquee para mí (Ubuntu 12.04, Upstart 1.5, Nginx)expect fork
funcionó aunque, como sugiere @danorton, Upstart rastreará el PID incorrecto. Tampoco pude volver a aparecer al trabajo (ver mi respuesta completa).Hay un ejemplo de archivo de configuración Upstart en el Wiki de NGINX .
Es posible que deba ajustar la ruta al binario nginx en el archivo de configuración.
Este archivo de configuración funciona bien para mí con Ubuntu 10.04 y nginx 1.0.5.
También instalé un
nginx
enlace simbólico/etc/init.d
apuntando/lib/init/upstart-job
para poder usar elservice
comando estándar para iniciar y detenernginx
.Nota: Si instala Phusion Passenger con NGINX, es posible que deba agregar la siguiente estrofa al script de configuración de Upstart:
Encontré esto necesario en mi configuración de Ubuntu. De lo contrario, cuando emití
initctl stop nginx
oservice nginx stop
nginx en realidad no se detuvo. También noté que Upstart pensó que el proceso nginx tenía un PID que en realidad era el PID de uno de los procesos de Passenger. Claramente, NGINX / Passenger confunde un poco a Upstart.fuente
stop: Job failed while stopping
mientras lo hacía. ¿Viste esto?Yo suelo:
La parada en
runlevel [!...]
parece ser más estándar. Es lo que hacen los scripts de stock ssh / samba. También debe agregar elrespawn
bit para que se reinicie si muere. Tampoco estoy seguro de por qué quiereconsole output
que simplemente envíe la salida de la consola a stdout. El comportamiento predeterminado es simplemente enviar la salida de la consola al registrador.Puedes ver todos los documentos de estrofa en el wiki de Upstart
fuente
Ver http://geeknme.wordpress.com/2009/10/15/getting-started-with-upstart-in-ubuntu para más información.
fuente
Curiosamente, ninguna de las respuestas aquí en realidad funciona completamente, ya que dejan el arranque en un estado de parada / muerte que impide que otro comience a funcionar. Esto significa que
restart nginx
falla.El error con upstart está bien documentado en https://bugs.launchpad.net/upstart/+bug/406397 y me sorprende que el autor de upstart no parezca preocuparse lo suficiente como para solucionarlo. La única solución que he visto que funciona es la siguiente (robada del mismo informe de error):
La ventaja de escribirlo así es que incluso la reaparición funciona. La desventaja es que es un truco feo y desagradable.
fuente