Vous pouvez remplacer l'ancien par le nouvel exécutable nginx sans interrompre le service - les nouvelles requêtes ne seront pas perdues (lors de la mise à niveau vers une nouvelle version ou de l'ajout/lors de la suppression du serveur module). (Apprentissage recommandé : Exploitation et maintenance de Nginx)
Utilisez d'abord le nouveau programme exécutable pour remplacer l'ancien (il est préférable de faire une sauvegarde), puis , envoyez le signal USR2 ( kill -USR2 pid) au processus principal.
Le processus principal renommera son fichier .pid en .oldbin (par exemple : /usr/local/nginx/logs/nginx.pid.oldbin), puis exécutera le nouveau programme exécutable, dans séquence Démarrez un nouveau processus principal et un nouveau processus de travail :
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
À ce stade, deux instances nginx s'exécuteront en même temps et traiteront les demandes entrantes ensemble. Pour supprimer progressivement l'ancienne instance, vous devez envoyer le signal WINCH à l'ancien processus maître, puis ses processus de travail commenceront à s'arrêter progressivement :
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33135 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
Après un certain temps, l'ancien processus de travail gère tous les éléments connectés. Après avoir quitté la requête, seul le nouveau processus de travail traitera la requête entrante :
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
À ce stade, car l'ancien serveur n'a pas encore fermé le socket qu'il écoute, donc, via ce qui suit Vous pouvez toujours restaurer l'ancien serveur en quelques étapes :
Envoyer le signal HUP à l'ancien processus maître - il démarrera ses processus de travail sans recharger le fichier de configuration
Envoyer le signal QUIT au nouveau processus principal pour lui demander d'arrêter son processus de travail en douceur
Envoyer le signal TERM au nouveau processus principal pour le forcer à quitter
Si, pour une raison quelconque, le nouveau travail, le processus ne peut pas quittez, envoyez-lui le signal KILL
Après la sortie du nouveau processus principal, l'ancien processus principal supprimera le préfixe .oldbin et le restaurera dans son fichier .pid, afin que tout soit restauré dans la mise à niveau avant.
Si la tentative de mise à niveau réussit et que vous souhaitez conserver le nouveau serveur, envoyez un signal QUIT à l'ancien processus principal pour quitter et laisser uniquement le nouveau serveur en cours d'exécution :
PID PPID USER %CPU VSZ WCHAN COMMAND 36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!