J'utilise nginx comme proxy inverse. Chaque fois que je mets à jour la config en utilisant
Sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
Sudo "kill -s HUP `cat /var/run/nginx.pid`"
Je fais face à un bref temps d'arrêt. Comment puis-je éviter cela?
Courir service nginx reload
ou /etc/init.d/nginx reload
Il effectuera un rechargement à chaud de la configuration sans temps d'arrêt. Si vous avez des demandes en attente, alors il y aura des processus nginx persistants qui gèreront ces connexions avant qu'il ne meure, c'est donc un moyen extrêmement gracieux de recharger les configurations.
Parfois, vous pouvez ajouter un préfixe avec Sudo
Courir /usr/sbin/nginx -s reload
Voir http://wiki.nginx.org/CommandLine pour plus d'options de ligne de commande.
Non, vous avez tort, vous n'êtes pas censé faire face à un temps d'arrêt avec la procédure que vous décrivez. (Nginx peut non seulement recharger la configuration à la volée sans aucun temps d'arrêt, mais même la mise à niveau de l'exécutable à la volée, toujours sans aucun temps d'arrêt.)
Selon http://nginx.org/docs/control.html#reconfiguration , l'envoi du signal HUP
à nginx garantit qu'il effectue un redémarrage gracieux et, si la configuration les fichiers sont incorrects, toute la procédure est abandonnée et vous vous retrouvez avec le nginx comme avant d'envoyer le signal HUP
. À aucun moment, aucun temps d'arrêt ne devrait être possible.
Pour que nginx relise le fichier de configuration, un signal HUP doit être envoyé au processus maître. Le processus maître vérifie d'abord la validité de la syntaxe, puis essaie d'appliquer une nouvelle configuration, c'est-à-dire d'ouvrir des fichiers journaux et de nouvelles sockets d'écoute. Si cela échoue, il annule les modifications et continue de fonctionner avec l'ancienne configuration.
Pour être complet, la façon systemd
de le faire:
systemctl reload nginx
Habituellement, le rechargement du fichier de configuration d'un service ne doit pas affecter le service en cours d'exécution. Cependant, cela dépend de la façon dont le signal SIGHUP
est traité.
Si un service spécifique connaît un temps d'arrêt pendant le rechargement, cela peut être contourné en exécutant le même service sur plusieurs serveurs en utilisant de préférence un équilibreur de charge. Dans ce cas, vous pouvez supprimer un serveur à la fois et le recharger/redémarrer. Ensuite, il peut être rajouté après avoir confirmé qu'il est OK.