Мои файлы envvar имеют следующие строки:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
В моем apache2.conf есть следующие строки:
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
Но когда я запустил apache2 -M I получите это:
apache2: bad user name ${APACHE_RUN_USER}
Временное исправление заключается в жестком коде www-data в этом файле apache2.conf. Здесь было несколько предположений, что это связано с тем, что какой-то скрипт конфигурации не заменил env vars правильно в моем файле apache2.conf. Независимо от того, как я могу заставить apache2 обращаться к моему файлу envvars?
Как показывает другая точка данных здесь , указывает, что envvars генерируется при сборке, но читается apache2ctl во время выполнения, что указывает на то, что этот файл не просто оставлен в процессе сборки.
Из http://httpd.apache.org/docs/2.2/configuring.html:
Значения переменных окружения оболочки могут использоваться в файлах конфигурационных файлов с использованием синтаксиса $ {ENVVAR}. Если «ENVVAR» - это имя допустимой переменной окружения, значение этой переменной заменяется на это место в строке файла конфигурации, и обработка продолжается так, как если бы этот текст был найден непосредственно в файле конфигурации. (Если переменная ENVVAR не найдена, символы «$ {ENVVAR}» остаются неизменными для использования на последующих этапах обработки файла конфигурации.)Таким образом, переменная действительно извлекается из среды как ожидается. Теперь, где это происходит?
В /etc/init.d/apache2, APACHE_ENVVARS установлен в путь к файлу envvars, который основан на пути initscript. Обычно это приводит к установке APACHE_ENVVARS=/etc/apache2/envvars. Теперь, поскольку это значение равно значениям по умолчанию, установленным в apache2ctl, оно не экспортируется.
Из /usr/sbin/apache2ctl:
# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS="$APACHE_CONFDIR/envvars"
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
. $APACHE_ENVVARS
fi
Объяснение: if APACHE_ENVVARS пуст, используйте путь по умолчанию, который является /etc/apache2/envvars. Если этот файл существует, «source» его (выполните команды из этого файла в текущей среде).
Убедитесь, что файл envvars не содержит синтаксических ошибок. Для выполнения такой проверки используйте:
sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL
Ошибки печатаются, если они есть.