126 votes

Comment redémarrer nginx seulement après que le test de configuration ait réussi sur Ubuntu ?

Lorsque je redémarre le service nginx en ligne de commande sur un serveur Ubuntu, le service se bloque lorsqu'un fichier de configuration nginx comporte des erreurs. Sur un serveur multisite, cela fait tomber tous les sites, même ceux qui n'ont pas d'erreurs de configuration.

Pour éviter cela, je lance d'abord le test de configuration de nginx :

nginx -t

Une fois le test réussi, j'ai pu redémarrer le service :

/etc/init.d/nginx restart

Ou recharger uniquement les configurations du site nignx sans redémarrage :

nginx -s reload

Existe-t-il un moyen de combiner ces deux commandes où la commande de redémarrage est conditionnée par le résultat du test de configuration ?

Je n'ai pas pu trouver ça en ligne et la documentation officielle sur ce sujet est plutôt basique. Je ne connais pas très bien Linux, donc je ne sais pas si ce que je cherche est juste devant moi ou pas du tout possible.

J'utilise nginx v1.1.19.

94voto

Dan Dascalescu Points 8165

A partir de nginx 1.8.0, la solution correcte est la suivante

sudo nginx -t && sudo service nginx reload

Notez qu'en raison d'un bug, configtest renvoie toujours un code de sortie nul même si le fichier de configuration contient une erreur.

50voto

Mohammad AbuShady Points 7143

En fait, pour autant que je sache, nginx affiche un message vide et ne redémarre pas réellement si la configuration est mauvaise.

Le seul moyen de le faire foirer est de faire un arrêt de nginx et de le redémarrer. L'arrêt serait réussi, mais le démarrage échouerait.

41voto

Mauricio Sánchez Points 151

J'utilise la commande suivante pour recharger Nginx (version 1.5.9) uniquement si un test de configuration a réussi :

/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload

Si vous devez le faire souvent, vous pouvez utiliser un alias. J'utilise le suivant :

alias n='/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload'

L'astuce ici est réalisée par le "&&" qui n'exécute la deuxième commande que si la première a réussi. Vous pouvez voir aquí une explication plus détaillée de l'utilisation de l'opérateur "&&".

Vous pouvez utiliser "restart" au lieu de "reload" si vous voulez vraiment redémarrer le serveur.

9voto

MechanisM Points 561
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'

et ensuite utiliser les commandes "nginx.reload" etc.

9voto

gokul kandasamy Points 174

Vous pouvez recharger en utilisant /etc/init.d/nginx reload y sudo service nginx reload

Si nginx -t lance une erreur et ne se recharge pas.

utilisez donc && pour exécuter les deux en même temps

comme

nginx -t && /etc/init.d/nginx reload

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X