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.

3voto

hcristea Points 93

Vous pouvez utiliser des signaux pour contrôler nginx.

Selon la documentation, vous devez envoyer un signal HUP au processus maître de nginx.

HUP - modification de la configuration, adaptation à un fuseau horaire modifié (uniquement pour FreeBSD et Linux), démarrage de nouveaux processus de travail avec une nouvelle configuration, arrêt en douceur des anciens processus de travail.

Consultez la documentation ici : http://nginx.org/en/docs/control.html

Vous pouvez envoyer le signal HUP au PID du processus maître de nginx comme ceci :

kill -HUP $( cat /var/run/nginx.pid )

La commande ci-dessus lit le PID de nginx à partir de /var/run/nginx.pid . Par défaut, le pid de nginx est écrit dans le fichier /usr/local/nginx/logs/nginx.pid mais cela peut être remplacé par la configuration. Vérifiez votre nginx.config pour voir où il enregistre le PID.

1voto

Daenney Points 11

Au moins sur Debian, le script de démarrage de nginx a une fonction de rechargement qui le fait :

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 $?
  ;;

On dirait que tout ce que vous avez à faire est d'appeler service nginx reload au lieu de restart puisqu'il appelle test_nginx_config .

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