SystemdDoctor
apache2.service веб-сервер

apache2.service в systemd: почему не поднимается

Apache в systemd запускается через обёртку apachectl, и это определяет разбор: код возврата приходит от неё, а причина — в выводе проверки конфигурации. Имя unit различается по дистрибутивам: apache2.service в Debian и Ubuntu, httpd.service в RHEL и Fedora.

О службе

Unit-файл Apache в Debian и Ubuntu вызывает apachectl start — скрипт, который читает переменные окружения из /etc/apache2/envvars и только затем запускает сам сервер. Поэтому при отказе в журнале сначала идут строки обёртки, а сообщение сервера может оказаться ниже или вовсе в отдельном файле ошибок.

Вторая особенность — модульность. Apache отказывается стартовать при ссылке на невключённый модуль: директива из конфигурации требует модуль, а тот не подключён. Ошибка выглядит как «Invalid command» с именем директивы, и разбирается включением нужного модуля, а не правкой конфигурации.

Третья — конфликт с другим веб-сервером. При установке nginx поверх Apache (или наоборот) оба пытаются занять 80-й порт. Один из них надо отключить целиком, а не просто остановить: иначе после перезагрузки конфликт вернётся.

Как устроена

Имя unitapache2.service в Debian и Ubuntu, httpd.service в RHEL и Fedora
Проверка конфигурацииapachectl configtest или apache2ctl -t
Тип unitType=forking с вызовом обёртки apachectl
Включение модулейa2enmod и a2dismod в Debian; правка LoadModule в RHEL
Перезагрузка настроекsystemctl reload apache2 — корректная, соединения дорабатывают

Частые ошибки

11 записей базы отмечены за этой службой.

Сообщения журнала

Коды выхода

  • status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.

Конфигурация unit

Ошибки служб

Коды выхода этой службы

Числа в status=N ниже 200 назначает сама программа, 200 и выше — systemd, когда не смог подготовить запуск.

statusЧто означает у этой службыКуда смотреть
1/FAILURE ошибка в конфигурации или занятый порт. Точное сообщение даёт apachectl configtest. разбор
78/CONFIG встречается у части сборок при ошибке настройки — код из набора sysexits. разбор

Диагностика

Проверка конфигурации: печатает файл и строку с ошибкой.

sudo apachectl configtest

Состояние службы и код от обёртки apachectl.

systemctl status apache2 --no-pager -l

Сообщения обёртки и сервера, попавшие в журнал.

sudo journalctl -u apache2 -n 50 --no-pager

Собственный файл ошибок Apache: там причина, если в журнале только код.

sudo tail -50 /var/log/apache2/error.log

Список включённых модулей — для ошибок вида «Invalid command».

sudo apache2ctl -M 2>/dev/null | head -30

Параметры unit, которые тут важны

  • Type=forking: обёртка завершается, сервер остаётся работать
  • EnvironmentFile=apache2 читает переменные из /etc/apache2/envvars
  • ExecReload=корректная перезагрузка вместо перезапуска
  • LimitNOFILE=нужен при большом числе одновременных соединений

Источники