Остановите Apache изящно

24

Есть ли способ остановить сервер Apache без прекращения выполнения запросов, в основном способ сказать это - не принимать больше соединений и завершить работу, когда вы закончите свои текущие?

php_nub_qq
источник

Ответы:

12

Используйте apachectl -k graceful-stopиз здесь :

Сигнал WINCH или graceful-stop заставляет родительский процесс посоветовать дочерним элементам выйти после их текущего запроса (или немедленно выйти, если они ничего не обслуживают). Затем родитель удалит свой PidFile и прекратит прослушивание на всех портах. Родитель продолжит работу и будет следить за детьми, которые обрабатывают запросы. Как только все дочерние элементы будут завершены и завершены, или по истечении времени ожидания, указанного в GracefulShutdownTimeout, родитель также завершится.

Б. Миллер
источник
1

Имейте в виду, что sys-v init использовал по умолчанию грациозную остановку и в качестве дополнительной опции использовал принудительную остановку. «Специальная» опция для постепенной остановки необходима только в том случае, если вы запускаете пользовательский менеджер процессов, который обычно убивает процессы.

Джон Китс
источник
Этот ответ может создать впечатление, что, поскольку systemdон не является специальным менеджером процессов, он не убивает процесс. Однако по умолчанию systemd также выполняет stopне graceful-stopдля Apache.
Б. Миллер
4
@ B.Miller, если ваш systemd выполняет остановку вместо постепенного останова, это ошибка для конкретной ОС, которую необходимо зарегистрировать. Arch Linux и CentOS 7 оба выполняют изящные остановки.
Харальд
Debian тоже делает изящную остановку
Джон Китс
2
Интересно @JohnKeates ... может быть, это специфично для Ubuntu 18.04. 18.04 использует команду остановки/usr/sbin/apachectl stop
Б. Миллер