it-swarm.com.de

Wie `Graceful Restart Apache` in Centos 7?

Mein System ist Centos 7.4 mit Apache 2.4
Basierend auf Apache-Handbuch , apachectl -k graceful sollte der Weg sein, um Apache ordnungsgemäß neu zu starten, aber ich habe folgende Nachricht erhalten:

[[email protected] root]# apachectl -k graceful
Passing arguments to httpd using apachectl is no longer supported.
You can only start/stop/restart httpd using this script.
If you want to pass extra arguments to httpd, edit the
/etc/sysconfig/httpd config file.

Was ist das Problem?
Wie man Graceful Restart Apache in Centos 7?

7
kittygirl

Bitte besuchen Sie diese Seite auf apachectl, bei der es sich anscheinend um eine neue Version handelt: https://httpd.Apache.org/docs/2.4/programs/apachectl.html

Das Argument '-k' muss nicht übergeben werden. apachectl graceful (Ohne -k) funktioniert einwandfrei für ein ordnungsgemäßes Neuladen/Neustarten auf meiner Centos7-Box und Centos6-Box.

Anscheinend hat niemand die in ihrer Frage zitierte Handbuchseite OP aktualisiert, die noch vorhanden ist und in der die Befehle durchgehend mit dem Argument '-k' angezeigt werden (apachectl -k anmutig, apachectl -k Neustart usw.). Auf dieser Seite gibt es keine Erklärung darüber, was das Argument -k tatsächlich tut.

Aber auf der neueren Seite gibt es diesen Hinweis über apachectl anmutig:

Dies ist gleichbedeutend mit apachectl -k anmutig.

Auf meiner Centos6-Box hatte ich den Befehl service httpd graceful Verwendet. Bei Centos7 hat das nicht mehr funktioniert. Es ist notwendig, apachectl graceful Zu verwenden, um das Äquivalent auf Centos 7 auszuführen. Auch apachectl graceful Funktioniert auf Centos 6 einwandfrei.

4
Jay Schauer

Die meisten systemd-basierten Distributionen verwenden ein gepatchtes apachectl -Skript [1], das Befehle an systemctl delegiert. Der gepatchte Befehl apachectl unterstützt nicht den "Pass-Through" -Operationsmodus, in dem Argumente an httpd übergeben werden. Die apachectl-Handbuchseite spiegelt den vorgelagerten nicht gepatchten Befehl apachectl wider, daher die Diskrepanz.

Ich empfehle die Verwendung der Abstraktion systemctl [2] zum Starten und Stoppen von Diensten.

Verwenden Sie daher Folgendes, um den Apache HTTP Server unter Centos 7 und anderen Linux-Distributionen mit systemd ordnungsgemäß neu zu starten:

Sudo systemctl reload httpd.service

Unter der Haube ruft dies httpd -k graceful. Sie können dies mit diesem Befehl überprüfen:

$ systemctl cat httpd.service | grep -F ExecReload
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful

So stoppen Sie den Apache HTTP Server:

Sudo systemctl stop httpd.service

die hinter den Kulissen ein SIGWINCH Signal an den httpd Prozess sendet.

Dies kann mit diesem Befehl überprüft werden:

$ systemctl cat httpd.service \
  | grep -E --before-context=1 'ExecStop|KillSignal'
# Send SIGWINCH for graceful stop
KillSignal=SIGWINCH

Das systemd.service [3] Handbuch besagt, dass in dieser Situation, in der die Option ExecStop nicht angegeben ist, "der Prozess durch Senden des in KillSignal angegebenen Signals beendet wird".

Warum SIGWINCH? Da Apache per https://bz.Apache.org/bugzilla/show_bug.cgi?id=50669 das Signal SIGWINCH als Auslöser für das ordnungsgemäße Herunterfahren verwendet.

Ein weiterer Befehl, den Sie möglicherweise nützlich finden, um Dienstoptionen zu untersuchen, ist der Befehl show in Kombination mit -p, --property Optionen wie folgt:

$ systemctl show httpd.service -p ExecStart -p ExecReload -p ExecStop -p KillSignal

[1] https://git.centos.org/blob/rpms!httpd.git/c7/SOURCES!httpd-2.4.3-apctl-systemd.patch
[2] https://www.freedesktop.org/software/systemd/man/systemctl.html
[3] https://www.freedesktop.org/software/systemd/man/systemd.service.html

1
Robin A. Meade

Wie bei anderen Linux-Distributionen, die systemd verwenden, können Sie httpd mit systemctl verwalten. Bestimmtes:

systemctl reload httpd

veranlasst httpd, seine Konfigurationsdateien neu zu laden und seine Worker mit der neuen Konfiguration neu zu starten, genau wie graceful.

1
Michael Hampton