Vous pouvez remplacer l'ancien exécutable nginx par le nouveau 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/suppression de modules serveur). (Apprentissage recommandé : fonctionnement et maintenance de nginx)
Tout d'abord, utilisez le nouveau programme exécutable pour remplacer l'ancien (il est préférable de faire une sauvegarde), puis envoyez le signal USR2 (kill-USR2pid) 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 et démarrera le nouveau processus principal et le nouveau travail en séquence. Processus :
PIDPPIDUSER%CPUVSZWCHANCOMMAND
331261root0.01164pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3313433126nobody0.01368kqreadnginx:workerprocess(nginx)
3313533126nobody0.01380kqreadnginx:workerprocess(nginx)
3313633126nobody0.01368kqreadnginx:workerprocess(nginx)
3626433126root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(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 :
PIDPPIDUSER%CPUVSZWCHANCOMMAND
331261root0.01164pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3313533126personne0,01380kqreadnginx:le processus de travail s'arrête (nginx)
3626433126root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
Après un certain temps, l'ancien processus de travail traite toutes les requêtes connectées puis se termine, ne laissant que le nouveau processus de travail pour gérer les requêtes entrantes :
PIDPPIDUSER%CPUVSZWCHANCOMMAND
331261root0.01164pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3626433126root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
A ce stade, comme l'ancien serveur n'a pas encore fermé le socket sur lequel il écoute, vous pouvez toujours restaurer l'ancien serveur en suivant les étapes suivantes :
Envoyez le signal HUP à l'ancien processus maître - il démarrera son processus de travail sans recharger le fichier de configuration
Envoyez le signal QUIT au nouveau processus principal, lui demandant d'arrêter calmement son processus de travail
Envoyez le signal TERM au nouveau processus principal pour le forcer à quitter
Si le nouveau processus de travail ne peut pas se terminer pour une raison quelconque, envoyez-lui un signal KILL
Une fois le nouveau processus principal terminé, l'ancien processus principal supprimera le préfixe .oldbin et le restaurera dans son fichier .pid. De cette façon, tout sera restauré à ce qu'il était avant la mise à niveau.
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 :
PIDPPIDUSER%CPUVSZWCHANCOMMAND
362641root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(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!