Назад | Перейти на главную страницу

Как выполнить `Graceful Restart Apache` в centos 7?

Моя система - centos 7.4, с apache 2.4
На основе руководство по apache,apachectl -k graceful должен быть способом изящного перезапуска apache, но я получил уведомление, как показано ниже:

[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.

В чем проблема?
Как Graceful Restart Apache в centos 7?

См. Эту страницу на apachectl, которая выглядит новой версией: https://httpd.apache.org/docs/2.4/programs/apachectl.html

Аргумент '-k' передавать не нужно. apachectl graceful (без -k) отлично работает для изящной перезагрузки / перезапуска на моем поле Centos7 и поле Centos6.

По-видимому, никто не обновил страницу руководства OP, указанную в ее вопросе, который все еще существует, и где команды показаны с аргументом '-k' повсюду (apachectl -k graceful, apachectl -k restart и т. Д.) На этой странице нет объяснений о том, что на самом деле делает аргумент -k.

Но на более новой странице есть эта заметка об apachectl graceful:

Это эквивалентно apachectl -k graceful.

В моем ящике Centos6 я использовал команду service httpd graceful. Это больше не работало на Centos7. Необходимо использовать apachectl graceful чтобы сделать аналог на Centos 7. Также apachectl graceful отлично работает на Centos 6.

Большинство дистрибутивов на основе systemd используют исправленный apachectl скрипт [1], который делегирует команды systemctl. Патченный apachectl команда не поддерживает "сквозной" режим работы, в котором аргументы передаются в httpd. На странице руководства apachectl отражены исходные не исправленные apachectl команда, отсюда и несоответствие.

Я рекомендую использовать systemctl [2] абстракция для запуска и остановки служб.

Таким образом, чтобы корректно перезапустить HTTP-сервер Apache на Centos 7 и других дистрибутивах Linux с использованием systemd, используйте:

sudo systemctl reload httpd.service

Под капотом это вызывает httpd -k graceful. Вы можете проверить это с помощью этой команды:

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

Чтобы остановить HTTP-сервер Apache:

sudo systemctl stop httpd.service

который, за кулисами, отправляет SIGWINCH сигнал к httpd обработать.

Это можно проверить с помощью этой команды:

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

В systemd.service [3] в руководстве говорится, что в этой ситуации, когда ExecStop опция не указана, "процесс завершается отправкой сигнала, указанного в KillSignal. "

Зачем SIGWINCH? Потому что за https://bz.apache.org/bugzilla/show_bug.cgi?id=50669 , Apache использует SIGWINCH сигнал как триггер «плавного отключения».

Еще одна команда, которая может оказаться полезной для изучения параметров службы, - это show команда в сочетании с -p, --property варианты, например:

$ 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

Как и в других дистрибутивах Linux, использующих systemd, вы можете управлять httpd с помощью systemctl. В частности:

systemctl reload httpd

заставит httpd перезагрузить свои файлы конфигурации и перезапустить своих рабочих с новой конфигурацией, точно так же, как graceful сделал.