Sie können die alte ausführbare Nginx-Datei durch die neue ersetzen, ohne den Dienst zu unterbrechen – neue Anfragen gehen nicht verloren (beim Upgrade auf eine neue Version oder beim Hinzufügen/Entfernen von Servermodulen). (Empfohlenes Lernen: Nginx-Betrieb und -Wartung)
Verwenden Sie zunächst das neue ausführbare Programm, um das alte zu ersetzen (am besten erstellen Sie ein Backup) und senden Sie dann das USR2-Signal (kill-USR2pid) an den Hauptprozess.
Der Hauptprozess benennt seine .pid-Datei in .oldbin um (zum Beispiel: /usr/local/nginx/logs/nginx.pid.oldbin), führt dann das neue ausführbare Programm aus und startet nacheinander den neuen Hauptprozess und die neue Arbeit Prozess:
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)
Zu diesem Zeitpunkt werden zwei Nginx-Instanzen gleichzeitig ausgeführt und eingehende Anfragen gemeinsam verarbeiten. Um die alte Instanz auslaufen zu lassen, müssen Sie das WINCH-Signal an den alten Masterprozess senden. Anschließend werden dessen Arbeitsprozesse ordnungsgemäß heruntergefahren:
PIDPPIDUSER%CPUVSZWCHANCOMMAND
331261root0.01164pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3313533126nobody0.01380kqreadnginx:workerprocessisshuttingdown(nginx)
3626433126root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
Nach einer Weile verarbeitet der alte Arbeitsprozess alle verbundenen Anfragen und wird dann beendet, sodass nur noch der neue Arbeitsprozess die eingehenden Anfragen bearbeiten muss:
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)
Da der alte Server zu diesem Zeitpunkt den Socket, den er überwacht, noch nicht geschlossen hat, können Sie den alten Server dennoch wiederherstellen, indem Sie die folgenden Schritte ausführen:
Senden Sie ein HUP-Signal an den alten Masterprozess – dieser startet seinen Arbeitsprozess, ohne die Konfigurationsdatei neu zu laden
Senden Sie das QUIT-Signal an den neuen Hauptprozess und bitten Sie ihn, seinen Arbeitsprozess ruhig zu beenden
Senden Sie ein TERM-Signal an den neuen Hauptprozess, um dessen Beendigung zu erzwingen
Wenn der neue Arbeitsprozess aus irgendeinem Grund nicht beendet werden kann, senden Sie ihm ein KILL-Signal
Nachdem der neue Hauptprozess beendet wurde, entfernt der alte Hauptprozess das .oldbin-Präfix und stellt es in seiner .pid-Datei wieder her. Auf diese Weise wird alles auf den Stand vor dem Upgrade zurückgesetzt.
Wenn der Upgrade-Versuch erfolgreich ist und Sie auch den neuen Server behalten möchten, senden Sie ein QUIT-Signal an den alten Hauptprozess, um ihn zu beenden und nur den neuen Server laufen zu lassen:
PIDPPIDUSER%CPUVSZWCHANCOMMAND
362641root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
Das obige ist der detaillierte Inhalt vonSo führen Sie ein reibungsloses Upgrade von Nginx-Betrieb und -Wartung durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!