web-dev-qa-db-fra.com

Comment `Graceful Restart Apache` dans centos 7?

Mon système est centos 7.4, avec Apache 2.4
Basé sur manuel Apache , apachectl -k graceful devrait être le moyen de redémarrer gracieusement Apache, mais j'ai reçu l'avis ci-dessous:

[root@localhost 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.

Quel est le problème?
Comment Graceful Restart Apache dans centos 7?

7
kittygirl

Veuillez consulter cette page sur apachectl, qui semble être une nouvelle version: https://httpd.Apache.org/docs/2.4/programs/apachectl.html

Il n'est pas nécessaire de passer l'argument "-k". apachectl graceful (sans -k) fonctionne très bien pour un rechargement/redémarrage gracieux sur ma boîte Centos7 et Centos6.

Apparemment, personne n'a mis à jour la page de manuel OP citée dans sa question, qui existe toujours, et où les commandes sont affichées avec l'argument '-k' partout (apachectl -k gracieux, apachectl -k redémarrage, etc.) Il n'y a aucune explication sur cette page sur ce que fait l'argument -k, cependant.

Mais sur la page la plus récente, il y a cette note sur apachectl gracieux:

Cela équivaut à apachectl -k gracieux.

Sur ma box Centos6, j'avais utilisé la commande service httpd graceful. Cela ne fonctionnait plus sur Centos7. Il est nécessaire d'utiliser apachectl graceful pour faire l'équivalent sur Centos 7. Aussi apachectl graceful fonctionne très bien sur Centos 6.

4
Jay Schauer

La plupart des distributions basées sur systemd utilisent un script apachectl patché [1] qui délègue les commandes à systemctl. La commande patchée apachectl ne prend pas en charge le mode de fonctionnement "pass-through" dans lequel les arguments sont passés à httpd. La page de manuel d'apachectl reflète la commande en amont non corrigée apachectl, d'où l'écart.

Je recommande d'utiliser l'abstraction systemctl [2] pour démarrer et arrêter les services.

Ainsi, pour redémarrer avec élégance le serveur HTTP Apache sur Centos 7 et les autres distributions Linux utilisant systemd, utilisez:

Sudo systemctl reload httpd.service

Sous le capot, cela invoque httpd -k graceful. Vous pouvez le vérifier avec cette commande:

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

Pour arrêter le serveur HTTP Apache:

Sudo systemctl stop httpd.service

qui, en coulisses, envoie un signal SIGWINCH au processus httpd.

Cela peut être vérifié avec cette commande:

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

Le systemd.service [3] manuel indique que dans cette situation, où l'option ExecStop n'est pas spécifiée, "le processus se termine en envoyant le signal spécifié dans KillSignal."

Pourquoi SIGWINCH? Parce que, par https://bz.Apache.org/bugzilla/show_bug.cgi?id=50669 , Apache utilise le signal SIGWINCH comme déclencheur de "fermeture progressive".

Une autre commande que vous pourriez trouver utile pour explorer les options de service est la commande show combinée avec -p, --property options, comme ceci:

$ 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

Comme avec les autres distributions Linux qui utilisent systemd, vous pouvez gérer httpd avec systemctl. En particulier:

systemctl reload httpd

entraînera httpd à recharger ses fichiers de configuration et à redémarrer ses travailleurs avec la nouvelle configuration, exactement comme graceful.

1
Michael Hampton