Cuando reinicio el servicio nginx en una línea de comando en un servidor Ubuntu, el servicio falla cuando un archivo de configuración nginx tiene errores. En un servidor de varios sitios, esto elimina todos los sitios, incluso los que no tienen errores de configuración.
Para evitar esto, primero ejecuto la prueba de configuración de nginx:
nginx -t
Después de que la prueba se ejecutó correctamente, pude reiniciar el servicio:
/etc/init.d/nginx restart
O solo vuelva a cargar las configuraciones del sitio nignx sin reiniciar:
nginx -s reload
¿Hay alguna manera de combinar esos dos comandos donde el comando de reinicio está condicionado 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 estoy buscando está justo frente a mí o no es posible en absoluto.
Estoy usando nginx v1.1.19.
Respuestas:
En realidad, hasta donde yo sé, nginx mostraría un mensaje vacío y en realidad no se reiniciaría si la configuración es mala.
La única forma de arruinarlo es haciendo una parada de nginx y luego comenzar de nuevo. Tendría éxito en detenerse, pero no comenzaría.
fuente
service nginx reload
no muestra nada si la configuración se cargó correctamente o no, por lo que es inútil si sospecha que la configuración podría ser incorrecta.service nginx restart
detendrá el servidor si la configuración tiene un error!A partir de nginx 1.8.0, la solución correcta es
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.fuente
nginx -t
sin sudo es casi seguro que fallará debido a errores de permiso.Utilizo el siguiente comando para recargar Nginx (versión 1.5.9) solo si una prueba de configuración fue exitosa:
Si necesita hacer esto con frecuencia, es posible que desee utilizar un alias. Yo uso lo siguiente:
El truco aquí lo hace "&&", que solo ejecuta el segundo comando si el primero tuvo éxito. Puede ver aquí una explicación más detallada del uso del operador "&&".
Puede utilizar "reiniciar" en lugar de "recargar" si realmente desea reiniciar el servidor.
fuente
pkill -1 nginx
(efectivamente, lo que hace mi recarga init.d / nginx) NO se recarga si la configuración falla y devuelve correctamente. Verifique sus propias versiones.nginx -t
lugar.y luego use los comandos "nginx.reload", etc.
fuente
Puedes recargar usando
/etc/init.d/nginx reload
ysudo service nginx reload
Si
nginx -t
arroja algún error, no se recargaráasí que usa && para ejecutar ambos al mismo tiempo
me gusta
fuente
run both at a same time
Ejecuta el comando de la derecha SI el comando de la izquierda devuelve un código de salida de 0. Singinx -t
arroja un error, el código de salida no será 0, por lo que el segundo comando no se ejecutará. Denginx -s reload
todos modosIf nginx -t throws some error then it won't reload
. La declaraciónrun both at a same time
también podría interpretarse como un solo comando o una línea. No lo interpreto necesariamente diciendo en este casoin parallel
.Puede usar señales para controlar nginx.
De acuerdo con la documentación, debe enviar la señal HUP al proceso maestro de nginx.
Consulte la documentación aquí: http://nginx.org/en/docs/control.html
Puede enviar la señal HUP al PID del proceso maestro nginx de esta manera:
El comando anterior lee el PID nginx de
/var/run/nginx.pid
. Por defecto, se escribe el pid de nginx,/usr/local/nginx/logs/nginx.pid
pero eso se puede anular en config. Verifique sunginx.config
para ver dónde guarda el PID.fuente
Al menos en Debian, el script de inicio de nginx tiene una función de recarga que:
Parece que todo lo que necesitas hacer es llamar en
service nginx reload
lugar derestart
desde que llamatest_nginx_config
.fuente
service nginx reload
no dará ningún tipo de indicación sobre si la configuración se probó bien o no, o si se recargó o no.test_nginx_config
entonces en ese caso?service nginx reload
es suficiente en la línea de comandos, sin embargo, a veces es posible que desee capturar la salida de stderr y devolverla a un script para solucionar problemas.nginx -t
le diría qué archivo tenía el parámetro no válido y en qué línea.