Чому apache2 не поважає мій файл envvars?


17

У моїх файлах 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. Існував деякі спекуляції тут , що це сталося через те , що деякі конфігурації сценарій не замінить окр правильно варов в моєму файлі apache2.conf. Незалежно від того, як мені змусити apache2 звернутися до файлу envvars?

Як інший пункт даних, цей сайт, схоже, вказує на те, що envvars створюється під час збирання, але читається апаш2ctl під час виконання, що дозволяє припустити, що цей файл не є просто залишком під час процесу збирання.

Відповіді:


30

Переглянувши відповідь, яку дав @Lekensteyn, я спробував sudo apache2ctl -Mіз моїм апахе2.conf повернутись до оригіналу. Це спрацювало, тому я трохи занурився у сторінки чоловіка. Ось що 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 за те, що вказав на мене в правильному напрямку.


Ще більш правильний шлях буде з допомогою сценарію ініціалізації: sudo stop apache2, sudo restart apache2і sudo start apache2( /etc/init.d/apache2 stopі т.д.)
Lekensteyn

У моєму випадку я додав umaskналаштування envvars, і навіть після перезавантаження з apache2ctl restartним все ще не вийшло, але перезапуск з використанням service apache2 restartзробив роботу ( service apache2 gracefulне робив).
Метт Браун

рекомендується використовувати сервіс замість apachectl, але якщо вам потрібно використовувати команди, не пов'язані з командною службою, як-от apachectl -S ... ця відповідь чудова. upvote
Кіла

FYI: Якщо /etc/init.d apache2 reloadви не отримаєте envvarsдодатки, вам доведеться зупинитися і запустити сервер
ThaDon

7

З 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

Пояснення: якщо APACHE_ENVVARSпорожній, використовуйте шлях за замовчуванням, який є/etc/apache2/envvars . Якщо цей файл існує, "джерело" його (виконайте команди з цього файлу в поточному середовищі).

Будьте впевнені, що envvarsфайл не містить синтаксичних помилок. Для проведення такої перевірки використовуйте:

sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL

Помилки друкуються, якщо такі є.


Я здійснив перевірку і можу переконатися, що мої envvars не містять синтаксичних помилок. Я знайшов рішення; дивіться мою відповідь нижче.
Евері Чан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.