web-dev-qa-db-fra.com

Comment redémarrer automatiquement Nginx quand il descend

J'ai déployé mon application sur AWS EC2 et je souhaite mettre en œuvre l'automatisation où si je redémarre mon instance ou lorsque le serveur Web NGinx est en panne, il va redémarrer en soi. Je ne sais pas vraiment où commencer avec ça.

J'ai entendu dire que je peux utiliser crontab pour planifier la surveillance automatique et si elle est basse, elle peut envoyer des alertes par courrier électronique et redémarrer le serveur Web.

16
Newbee Coding

Utilisez Monit, à quel point est de prendre en charge des situations comme celle-ci.

apt install monit

nano /etc/monit/conf.d/nginx.conf

Mettre du contenu ci-dessous dans ce fichier et redémarrer monit

check process nginx with pidfile /var/run/nginx.pid
start program = "/usr/sbin/service nginx start"
stop program = "/usr/sbin/service nginx stop"
7
iWizard

C'est une caractéristique de SystemD. Remplacer le fichier d'unité existant pour NGinx en exécutant systemctl edit nginx Puis coller dans:

[Service]
Restart=always

Sauvegarder.

Si NGinx est en panne, par exemple. Le tueur Oom, il sera redémarré après la mort. Si vous avez une erreur de configuration dans NGinx, il ne sera pas redémarré, bien sûr.

Pour vérifier cette configuration. Démarrer le service Nginx avec systemctl start nginx, et vérifier qu'il fonctionne avec systemctl status nginx.

Tuez-la via pkill -f nginx. Confirmez que NGinx fonctionne de toute façon avec systemctl status nginx.

61
Danila Vershinin

Vous avez déjà beaucoup de réponses à le faire, mais j'utiliserais ce qui se passe pour le faire fermer en premier lieu et résoudre ce problème.

Lorsque Nginx se bloque, toutes les demandes actuellement en cours seront terminées dans un État inconnu - Fichiers à moitié transférés, les appels API non remplis. En principe, l'application sur le dessus devrait traiter de cela, dans la pratique, elle fait rarement, mais à cette couche, elle se manifestera comme un comportement étrange et non préventif, donnant aux gens l'utilisation du service un sentiment d'instabilité (et à juste titre).

5
Simon Richter

C'est en fait assez simple

Allez à/lib/systemd/système de sauvegarde système Votre unité SystemD Ngnix (au cas échéant) avec Sudo cp ngnix.service ngnix.service.old

Ajoutez les 2 lignes suivantes à la fin du bloc de service dans Ngnix.Service

Restart=on-failure
RestartSec=5s

Chargez la nouvelle config avec Sudo systemctl daemon-reload

Pour tester - essayons de tuer Ngnix

cat /var/run/nginx.pid vous donnera le pid

Sudo kill -9 PID va tuer Nginix

Vous constaterez que si vous vérifiez un PID, il y aura un PID différent. Si vous n'aviez pas couru ces lignes, tuez Ngnix produirait un serveur en panne. Ceci sera seulement déclencher un redémarrage sur un arrêt non gracieux

1
Journeyman Geek

Si vous souhaitez redémarrer le processus comme vous l'avez dit dans le titre de la question, toutes les autres réponses semblent super. Si vous souhaitez redémarrer l'instance comme vous l'avez dit dans l'organe de la question, vous pouvez utiliser un groupe d'échelle automatique.

Configurez le groupe de mise à l'échelle automatique avec une instance minimale et maximale 1, et pointez le contenu HealthCheck vers le contenu desservi par votre serveur Web Nginx (idéalement, quelque chose qui ne consommait pas beaucoup de CPU comme robots.txt). Le groupe d'échelle automobile détectera lorsque votre instance est malsaine (peut prendre 3 ou 5 échec de santé) et va tuer l'instance et commencer une nouvelle.

Gardez à l'esprit, vous perdrez tout l'état stocké dans l'instance (comme l'instance est réellement détruite). Garder l'état à l'intérieur d'un serveur est un anti-motif nuage de toute façon. Vous perdrez également des caches.

0
Blueriver