Apache Error AH00111: Config variable APACHE_RUN_DIR is not defined — Решение
При попытке запустить Apache напрямую через бинарный файл /usr/sbin/apache2 в Debian/Ubuntu консоль выдает фатальную ошибку инициализации переменных окружения: AH00111: Config variable ${APACHE_RUN_DIR} is not defined или AH00111: Config variable ${APACHE_LOG_DIR} is not defined.
| Переменная окружения | Файл определения | Значение по умолчанию в Debian/Ubuntu |
|---|---|---|
${APACHE_RUN_DIR} | /etc/apache2/envvars | /var/run/apache2 |
${APACHE_LOG_DIR} | /etc/apache2/envvars | /var/log/apache2 |
${APACHE_RUN_USER} | /etc/apache2/envvars | www-data |
- Прямой вызов
/usr/sbin/apache2 -tилиapache2 -k startаварийно прерывается. - Конфигурационные файлы виртуальных хостов не могут вычислить пути к логам и сокетам.
- Правильный способ проверки и запуска: Всегда используйте утилиту
apache2ctlвместо прямого вызова бинарникаapache2, так как она автоматически подгружает системные переменные окружения:# ПРАВИЛЬНО: sudo apache2ctl configtest # НЕПРАВИЛЬНО: sudo apache2 -t - Если вам необходимо выполнить команду
apache2напрямую, предварительно импортируйте переменные из файлаenvvars:source /etc/apache2/envvars /usr/sbin/apache2 -t - Проверьте физическое существование и права на чтение файла окружения
/etc/apache2/envvars:ls -la /etc/apache2/envvars - Убедитесь, что служба systemd корректно настроена на загрузку окружения в unit-файле
/lib/systemd/system/apache2.service:[Service] EnvironmentFile=/etc/apache2/envvars - Перезапустите веб-сервер штатной командой systemd:
sudo systemctl restart apache2
/etc/apache2/envvars. В Red Hat/CentOS/Fedora переменные окружения не используются, и пути захардкожены в httpd.conf напрямую.Частые вопросы (FAQ)
Почему Debian использует файл envvars?
Это позволяет системным администраторам централизованно менять пользователя веб-сервера, каталоги сокетов, логов и локали (LANG/LC_ALL) без ручного редактирования десятков конфигурационных файлов vhost.
Как запустить Apache2 под gdb при наличии этой ошибки?
Выполните source /etc/apache2/envvars, после чего запустите gdb --args /usr/sbin/apache2 -X.
Что делать, если файл /etc/apache2/envvars случайно удален?
Восстановите его стандартное содержимое из пакета: sudo apt-get install --reinstall apache2.2-common (или apache2-bin/apache2-data).
Можно ли заменить переменные ${APACHE_LOG_DIR} на абсолютные пути?
Да, вы можете прописать абсолютные пути вроде /var/log/apache2/access.log напрямую в конфигах vhost, но использование стандартных переменных считается лучшей практикой.