В моих файлах 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
, я получаю это :
apache2: bad user name ${APACHE_RUN_USER}
Временное исправление - жестко запрограммировать www-data
в мой файл apache2.conf. Были некоторые предположения здесь , что это произошло из-за того, что какой-то конфигурационный скрипт неправильно заменил переменные env в моем файле apache2.conf. Независимо от того, как я могу заставить apache2 обращаться к моему файлу envvars?
Как еще одна точка данных , этот сайт , похоже, указывает, что envvars генерируется при сборке, но читается apache2ctl во время выполнения, предполагая, что этот файл не является просто остатком процесса сборки.
Из http://httpd.apache.org/docs/2.2/configuring.html :
Значения переменных среды оболочки могут использоваться в строках файла конфигурации. используя синтаксис $ {ENVVAR}. Если «ENVVAR» - это имя допустимой переменной среды, значение этой переменной подставляется в это место в строке файла конфигурации, и обработка продолжается, как если бы этот текст был найден непосредственно в файле конфигурации. (Если переменная ENVVAR не найдена, символы "$ {ENVVAR}" остаются неизменными для использования на более поздних этапах обработки файла конфигурации.)
blockquote>Таким образом, переменная действительно извлекается из окружающая среда, как и ожидалось. Теперь, где это происходит?
В
/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
Объяснение: если
APACHE_ENVVARS
пусто, используйте путь по умолчанию/etc/apache2/envvars
. Если этот файл существует, «отправьте» его (выполните команды из этого файла в текущей среде).Убедитесь, что файл
envvars
не содержит синтаксических ошибок. Чтобы выполнить такую проверку, используйте:sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL
Ошибки напечатаны, если таковые имеются.
После просмотра ответа, данного @Lekensteyn, я попытался sudo apache2ctl -M
с моим apache2.conf, возвращенным к оригиналу. Это сработало, поэтому я немного покопался в man-страницах. Вот что man apache2
должен был сказать:
In general, apache2 should not be invoked directly, but rather should
be invoked via /etc/init.d/apache2 or apache2ctl. The default Debian
configuration requires environment variables that are defined in
/etc/apache2/envvars and are not available if apache2 is
started directly. However, apache2ctl can be used to pass arbitrary
arguments to apache2.
Итак, ответ на этот вопрос: Вы не используете apache2
правильно; используйте вместо этого apache2ctl
.
Спасибо @Lekensteyn за то, что указал мне правильное направление.