Запуск, остановка и перезапуск Apache: команды и отличие graceful

Тестовая средаСемейство RHELAlmaLinux 9.8Учётная запись rootПроверено 2026-10-29

На сервере Linux Apache запускают, останавливают и перезапускают командой systemctl, а имя службы — httpd в семействе RHEL и apache2 в семействе Debian. Прочитав вывод systemctl status, unit-файл httpd и скрипт apachectl на сервере AlmaLinux 9, мы увидели, что restart останавливает Apache и запускает его заново, а graceful оставляет родительский процесс и лишь перечитывает конфигурацию.

Остановка и перезапуск действительно прерывают работу службы, поэтому на тестовом сервере мы не выполняли start, stop и restart. Вместо этого мы проверили поведение по официальной документации Apache, руководству httpd.service и записям reload, оставшимся на сервере. Имя хоста, номер порта, время и число запросов в выводе ниже — примерные значения.

1️⃣ Команды запуска, остановки и перезапуска Apache

Имя службы Apache зависит от семейства дистрибутива. Семейство RHEL — RHEL, AlmaLinux, Rocky Linux — регистрирует её в systemd под именем httpd, а Ubuntu и Debian — под именем apache2.

ЗадачаСемейство RHEL (httpd)Семейство Debian (apache2)
Запускsystemctl start httpdsystemctl start apache2
Остановкаsystemctl stop httpdsystemctl stop apache2
Перезапускsystemctl restart httpdsystemctl restart apache2
Перечитать конфигурацию (graceful)systemctl reload httpdsystemctl reload apache2
Проверка состоянияsystemctl status httpdsystemctl status apache2
Автозапуск при загрузкеsystemctl enable httpdsystemctl enable apache2

Выполняйте команды из таблицы под root. Если вы работаете под обычной учётной записью, добавьте sudo перед командой.

Если перепутать семейства и указать другое имя, команда не выполнится. Запрос состояния через apache2 на сервере семейства RHEL вернул ошибку о том, что unit не найден.

systemctl status apache2
Unit apache2.service could not be found.

Код выхода при этом был 4, а после замены имени на httpd на том же сервере появился обычный вывод.

В семействе RHEL Apache запускают, останавливают и перезапускают тремя командами ниже.

systemctl start httpd

start запускает остановленный Apache. Проверить, что он запустился, можно через systemctl status.

systemctl stop httpd

stop останавливает Apache. Пока вы снова его не запустите, он не принимает веб-запросы.

systemctl restart httpd

restart выполняет stop и start по очереди. Если вы изменили только файлы конфигурации, примените их через reload (graceful), который не разрывает соединения.

В AlmaLinux 9 apachectl — это shell-скрипт, установленный вместо apachectl, который поставляет Apache. Получив start, stop, restart или status, он передаёт их systemctl как есть, поэтому apachectl restart и systemctl restart httpd делают одно и то же.

2️⃣ Проверка состояния службы Apache

Работает ли Apache сейчас и когда он был запущен, проверяйте через systemctl status.

systemctl status httpd
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2026-10-17 08:30:49 UTC; 1 week 4 days ago
       Docs: man:httpd.service(8)
    Process: 2930107 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
   Main PID: 741 (httpd)
     Status: "Total requests: 52418; Idle/Busy workers 75/0;Requests/sec: 0.0528; Bytes served/sec: 3.9KB/sec"
      Tasks: 224 (limit: 4615)
     Memory: 184.3M (peak: 593.8M)
        CPU: 47min 33.944s
     CGroup: /system.slice/httpd.service
             ├─    741 /usr/sbin/httpd -DFOREGROUND
             ├─2930111 /usr/sbin/httpd -DFOREGROUND
             ├─2930143 /usr/sbin/httpd -DFOREGROUND
             └─2930144 /usr/sbin/httpd -DFOREGROUND

Oct 28 15:00:00 server systemd[1]: Reloading The Apache HTTP Server...
Oct 28 15:00:00 server systemd[1]: Reloaded The Apache HTTP Server.
Oct 28 15:00:00 server httpd[741]: Server configured, listening on: port 80

active (running) в строке [Active] означает, что служба сейчас работает, а время после since — момент запуска. Этот сервер был запущен 11 дней назад и ни разу не останавливался, а [Main PID] 741 — родительский процесс, запущенный тогда.

В [CGroup] под 741 перечислены дочерние процессы, которые и обрабатывают запросы (см. Процессы). Строка [Status] показывает число обработанных к этому моменту запросов, а также число свободных и занятых воркеров.

Три строки журнала в самом низу вывода — записи reload, появлявшиеся раз в день в одно и то же время: утилита logrotate, которая делит журналы по датам, после ротации выполнила systemctl reload httpd, и в руководстве httpd.service тоже сказано, что после logrotate для httpd выполняется reload.

В скриптах и командах проверки используйте is-active и is-enabled, которые выводят только одно слово.

systemctl is-active httpd
active

Когда служба работала, выводились active и код выхода 0. Даже для apache2, которого на сервере нет, выводились inactive и код выхода 3, как у остановленной службы, поэтому в скриптах сначала проверяйте правильность имени службы.

systemctl is-enabled httpd
enabled

enabled означает, что Apache зарегистрирован для автоматического запуска при загрузке.

3️⃣ Перезапуск Apache и graceful: в чём разница

restart и graceful (reload) по-разному обращаются с запросами в обработке и родительским процессом. Эту разницу мы сначала проверили по строкам unit-файла httpd, которые используются для reload и stop.

systemctl cat httpd | grep -E "Exec|Kill"
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
KillSignal=SIGWINCH
KillMode=mixed

Строка ExecReload означает, что reload выполняет httpd -k graceful, а строка KillSignal — что при stop отправляется сигнал SIGWINCH (graceful-stop).

Поэтому systemctl restart httpd останавливает Apache через graceful-stop, а затем запускает заново. Запросы в обработке завершаются до остановки, но сам родительский процесс запускается заново, поэтому номер [Main PID] меняется. Между остановкой и запуском порт закрыт, и новые соединения не принимаются. Unit-файл apache2.service из пакета Debian тоже выполняет apachectl graceful-stop при остановке.

httpd -k restart отправляет родительскому процессу сигнал HUP. По официальной документации Apache, родительский процесс остаётся, но дочерние процессы сразу завершаются, поэтому запросы в обработке обрываются, а статистика запросов сбрасывается до 0.

graceful отправляет родительскому процессу сигнал USR1. Родительский процесс перечитывает файлы конфигурации, а каждый дочерний процесс, закончив текущий запрос, заменяется дочерним процессом с новой конфигурацией. Соединения, пришедшие за это время, операционная система держит в очереди, поэтому они не теряются.

Это как магазин, который не закрывает двери, пока каждый кассир, обслужив своего покупателя, передаёт место коллеге по новому графику смен.

🔁 Что меняется при трёх способах перезапуска Apache
Поясняющая схема
🔁 Команда
$ systemctl restart httpdhttpd -k restartsystemctl reload httpd
① Родительский процесс (Main PID)Останавливается и запускается зановоНомер Main PID меняется.Без измененийПолучает сигнал HUP и перечитывает файлы конфигурации.Без измененийПолучает сигнал USR1 и перечитывает файлы конфигурации.
② Запросы в обработкеЗавершаются, затем остановкаОстановка идёт через graceful-stop (WINCH), поэтому запросы в обработке завершаются.Сразу обрываютсяСразу завершает дочерние процессы и запускает новые.Обрабатываются до концаКаждый дочерний процесс после своего запроса заменяется процессом с новой конфигурацией.
③ Новые соединенияНе принимаются до перезапускаПри остановке закрывает порт.Обрабатываются после запуска новых процессовОставляет порт открытым и обрабатывает их после запуска новых дочерних процессов.Не обрываютсяОставляет порт открытым, и операционная система держит соединения в очереди.
systemctl restart httpd останавливает Apache и запускает заново, поэтому заново запускается и сам родительский процесс, а в промежутке новые соединения не принимаются.
httpd -k restart отправляет родительскому процессу сигнал HUP и сразу завершает дочерние процессы, поэтому запросы в обработке обрываются.
systemctl reload httpd и apachectl graceful оставляют родительский процесс как есть и заменяют дочерние процессы по мере завершения их запросов.

Эту разницу мы проверили по Main PID. Хотя reload выполнялся каждый день, Main PID 741 и время Active оставались такими же, как 11 дней назад, а номера дочерних процессов (2930111 и т. д.) шли сразу после 2930107 из строки [Process] последнего reload.

systemctl reload httpd, apachectl graceful и httpd -k graceful — это один и тот же graceful. В AlmaLinux 9 apachectl, получив graceful, отправляет родительскому процессу SIGUSR1 через systemctl kill, а apachectl -k graceful с -k впереди отбрасывает -k и делает то же самое.

graceful лишь перечитывает конфигурацию, поэтому не подходит после обновления пакета httpd. По руководству httpd.service, reload небезопасен, если обновлённый модуль использует функцию, которая есть только в новом httpd, поэтому при обновлении пакет httpd автоматически перезапускает Apache через systemctl try-restart.

4️⃣ Проверка синтаксиса конфигурации Apache

Даже если вы применяете изменения через graceful, чтобы не разрывать соединения, Apache не перейдёт на новую конфигурацию, если в файле конфигурации есть опечатка. По официальной документации Apache, restart и graceful перед выполнением сначала проверяют синтаксис и при ошибке лишь выводят сообщение об ошибке, не перезапускаясь.

Поэтому после правки конфигурации сначала проверьте синтаксис командой apachectl -t.

apachectl -t
Syntax OK

apachectl -t вывел одну строку Syntax OK, и apachectl configtest дал тот же результат. apachectl семейства RHEL, получив -t, просто выполняет httpd -t.

Проверка тестового файла конфигурации с одним неправильно написанным именем директивы вместо Syntax OK выдала ошибку AH00526 с номером строки и нераспознанной директивой ([Invalid command 'DirectoryIndx']), а код выхода был 1. Исправьте строку, указанную в сообщении об ошибке, и проверьте снова.

systemctl reload httpd

Если проверка пройдена, примените конфигурацию через reload. По официальной документации Apache, проверка синтаксиса смотрит только на синтаксис, поэтому применение может не удаться, даже если проверка прошла. После reload ещё раз проверьте строку [Active] в systemctl status и журналы в самом низу.

🔲 Симулятор команд Apache

На виртуальном сервере в симуляторе ниже вы можете сами вводить команды systemctl, apachectl и httpd -k. После reload Main PID остаётся прежним, меняются только номера дочерних процессов. После restart новый номер получает даже Main PID.

Симулятор команд Apachehttpd семейства RHEL
[root@server work]#
Клавишами ↑↓ можно вызвать ранее введённые команды.

🔢 FAQ & рекомендуемые материалы

При вводе apachectl fullstatus в AlmaLinux 9 появилась ошибка о том, что параметр fullstatus не поддерживается (not supported), и код выхода 2. apachectl семейства RHEL — это скрипт, установленный вместо apachectl, который поставляет Apache, поэтому он принимает только start, stop, restart, status, graceful, graceful-stop, configtest, -t и -v.

По руководству httpd.service, unit httpd по умолчанию выключен (disabled), и preset: disabled в строке [Loaded] вывода systemctl status — это и есть значение по умолчанию. Если один раз выполнить systemctl enable httpd, Apache будет запускаться при каждой загрузке, а если добавить --now к enable, он запустится и прямо сейчас.

По руководству httpd.service, если запустить httpd напрямую из root-оболочки, служба стартует вне systemd, и стандартные ограничения безопасности, такие как SELinux, не применяются. Поэтому запускайте и останавливайте службу через systemctl или apachectl, а команду httpd используйте только с параметрами, которые не запускают службу, например для проверки синтаксиса -t.

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 3   +   8   =