para - ubuntu dafont
¿Cómo reinicio nginx solo después de que la prueba de configuración fue exitosa en ubuntu? (6)
Cuando reinicio el servicio nginx en línea de comandos en un servidor ubuntu, el servicio falla cuando un archivo de configuración nginx tiene errores. En un servidor de varios sitios, esto anula todos los sitios, incluso los que no tienen errores de configuración.
Para evitar esto, ejecuto primero la prueba de configuración nginx:
nginx -t
después de que la prueba se ejecutó correctamente, puedo reiniciar el servicio
/etc/init.d/nginx restart
o solo recarga las configuraciones del sitio nignx sin un reinicio
nginx -s reload
¿Hay alguna manera de combinar esos dos comandos donde el comando de reinicio es condicional al resultado de la prueba de configuración?
No pude encontrar esto en línea y la documentación oficial sobre esto es bastante básica. No conozco bien Linux, así que no sé si lo que busco está justo delante de mí o no es posible en absoluto.
Estoy usando nginx v1.1.19
Cualquier ayuda en esto es apreciada.
A partir de nginx 1.8.0, la solución correcta es
sudo nginx -t && sudo service nginx reload
Tenga en cuenta que debido a un error, configtest
siempre devuelve un código de salida cero incluso si el archivo de configuración tiene un error.
Al menos en Debian el script de inicio de nginx tiene una función de recarga que hace:
reload)
log_daemon_msg "Reloading $DESC configuration" "$NAME"
test_nginx_config
start-stop-daemon --stop --signal HUP --quiet --pidfile $PID /
--oknodo --exec $DAEMON
log_end_msg $?
;;
Parece que todo lo que necesitas hacer es llamar al service nginx reload
lugar de restart
ya que llama a test_nginx_config
.
En realidad, hasta donde yo sé, nginx mostraría un mensaje vacío y no se reiniciará si la configuración es mala, la única manera de arruinarlo es hacer una parada nginx y luego comenzar de nuevo, se detendrá pero fallará para comenzar.
Puedes usar señales para controlar nginx.
De acuerdo con la documentación, debe enviar la señal HUP al proceso maestro de nginx.
HUP - cambiando la configuración, manteniéndose actualizado con un huso horario modificado (solo para FreeBSD y Linux), iniciando nuevos procesos de trabajo con una nueva configuración, apagado ordenado de procesos de trabajo antiguos
Consulte la documentación aquí: http://nginx.org/en/docs/control.html
Puede enviar la señal HUP al PID del proceso maestro de nginx de la siguiente manera:
kill -HUP $( cat /var/run/nginx.pid )
El comando de arriba lee el ninix PID de /var/run/nginx.pid
. Por defecto, nginx pid se escribe en /usr/local/nginx/logs/nginx.pid
pero puede anularse en la configuración. Compruebe su nginx.config
para ver dónde guarda el PID.
Utilizo el siguiente comando para volver a cargar Nginx (versión 1.5.9) solo si una prueba de configuración fue exitosa:
/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload
Si necesita hacer esto a menudo, puede usar un alias. Yo uso lo siguiente:
alias n=''/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload''
El truco aquí lo realiza el "&&" que solo ejecuta el segundo comando si el primero fue exitoso. Puede ver here una explicación más detallada del uso del operador "&&".
Puede usar "reiniciar" en lugar de "recargar" si realmente desea reiniciar el servidor.
alias nginx.start=''sudo nginx -c /etc/nginx/nginx.conf''
alias nginx.stop=''sudo nginx -s stop''
alias nginx.reload=''sudo nginx -s reload''
alias nginx.config=''sudo nginx -t''
alias nginx.restart=''nginx.config && nginx.stop && nginx.start''
alias nginx.errors=''tail -250f /var/logs/nginx.error.log''
alias nginx.access=''tail -250f /var/logs/nginx.access.log''
alias nginx.logs.default.access=''tail -250f /var/logs/nginx.default.access.log''
alias nginx.logs.default-ssl.access=''tail -250f /var/logs/nginx.default.ssl.log''
y luego usa los comandos "nginx.reload", etc.