Stoppen und Neustarten des Apache HTTP-Servers
Graceful Restart
Signal: USR1 apachectl -k graceful
Das Signal USR1
oder graceful
veranlasst den übergeordneten Prozess, die Kinder anzuweisen, nach ihrer aktuellen Anforderung zu beenden (oder sofort zu beenden, wenn sie dies tun) Das übergeordnete Element liest seine Konfigurationsdateien erneut und öffnet seine Protokolldateien erneut. Wenn jedes untergeordnete Element stirbt, ersetzt das übergeordnete Element es durch ein untergeordnetes Element aus der neuen Generation der Konfiguration, das sofort neue Anforderungen bedient.
Dieser Code berücksichtigt immer die Prozesssteuerungsanweisung der MPMs, sodass die Anzahl der Prozesse und Threads, die für die Bereitstellung von Clients verfügbar sind, während des gesamten Neustartprozesses auf den entsprechenden Werten gehalten wird. Außerdem wird StartServers
auf folgende Weise: wenn nach einer Sekunde mindestens StartServers
Es wurden keine neuen Kinder erstellt. Erstellen Sie dann genug, um die Lücke zu schließen. Daher versucht der Code, sowohl die Anzahl der für die aktuelle Auslastung des Servers geeigneten untergeordneten Elemente beizubehalten als auch Ihre Wünsche mit dem Parameter StartServers
zu berücksichtigen.
Benutzer von mod_status
stellt fest, dass die Serverstatistik nicht auf Null gesetzt wird, wenn eine USR1
gesendet wird. Der Code wurde geschrieben, um sowohl die Zeit zu minimieren, in der der Server keine neuen Anforderungen bearbeiten kann (sie werden vom Betriebssystem in die Warteschlange gestellt, damit sie auf keinen Fall verloren gehen), als auch um Ihre Optimierungsparameter zu respektieren Dazu muss die Anzeigetafel verwendet werden, mit der alle Kinder über Generationen hinweg verfolgt werden.
Das Statusmodul verwendet auch eine G
, um die Kinder anzuzeigen, die es sind Vor dem ordnungsgemäßen Neustart wurden noch Serving-Anforderungen gestartet.
Derzeit gibt es keine Möglichkeit für ein Protokollrotationsskript, das USR1
verwendet, um sicher zu sein, dass alle Kinder schreiben Das Protokoll vor dem Neustart ist beendet. Wir empfehlen, dass Sie nach dem Senden des Signals USR1
eine geeignete Verzögerung verwenden, bevor Sie etwas mit dem alten Protokoll tun. Wenn beispielsweise die meisten Treffer weniger dauern Wenn Benutzer mit Verbindungen mit geringer Bandbreite weniger als 10 Minuten benötigen, können Sie 15 Minuten warten, bevor Sie mit dem alten Protokoll etwas unternehmen.
Wenn Sie einen Neustart durchführen, wird zuerst eine Syntaxprüfung ausgeführt, um sicherzustellen, dass die Konfigurationsdateien keine Fehler enthalten. Wenn Ihre Konfigurationsdatei Fehler enthält, wird eine Fehlermeldung zu diesem Syntaxfehler angezeigt, und der Server lehnt einen Neustart ab. Dies vermeidet die Situation, in der der Server angehalten wird und dann nicht neu gestartet werden kann, sodass Sie einen nicht funktionierenden Server haben.
Dies garantiert immer noch nicht, dass der Server ordnungsgemäß neu gestartet wird. Um die Semantik der Konfigurationsdateien sowie die Syntax zu überprüfen, können Sie versuchen, httpd
als Nicht-Root-Benutzer zu starten. Wenn keine Fehler vorliegen, versucht es, seine Sockets und Protokolle zu öffnen, und schlägt fehl, weil es nicht root ist (oder weil das aktuell ausgeführte httpd
diese Ports bereits gebunden hat). Wenn dies fehlschlägt Aus irgendeinem anderen Grund handelt es sich wahrscheinlich um einen Konfigurationsdateifehler, und der Fehler sollte vor dem ordnungsgemäßen Neustart behoben werden.