Apache2 neden envvars dosyama saygı duymuyor?


17

Envvar dosyalarımda şu satırlar var:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Apache2.conf dosyamda şu satırlar var:

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Ama koştuğumda şunu alıyorum apache2 -M:

apache2: bad user name ${APACHE_RUN_USER}

Geçici bir düzeltme, www-dataapache2.conf dosyama sabit kod yazmaktır. Burada bunun bazı yapılandırma komut dosyalarının apache2.conf dosyamdaki env değişkenlerinin yerini almaması nedeniyle bazı spekülasyonları vardı . Ne olursa olsun envvars dosyama danışmak için apache2 nasıl alabilirim?

Başka bir veri noktası olarak, bu site envvarların derlemede oluşturulduğunu gösteriyor, ancak çalışma zamanında apache2ctl tarafından okunuyor, bu da bu dosyanın derleme işlemi tarafından artık kaka olmadığını gösteriyor.

Yanıtlar:


30

@Lekensteyn tarafından verilen cevaba baktıktan sonra, sudo apache2ctl -Mapache2.conf'um orijinaline geri döndüm. Bu işe yaradı, bu yüzden adam sayfalarına biraz kazdım. İşte man apache2söylemek zorunda olanlar:

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.

Yani, bu sorunun cevabı: Doğru kullanmıyorsunuz apache2; kullanın apache2ctl.

@Lekensteyn beni doğru yöne yönlendirdiğiniz için teşekkürler.


: Daha da doğru bir şekilde Başlangıç Betiği'nin kullanarak olurdu sudo stop apache2, sudo restart apache2ve sudo start apache2( /etc/init.d/apache2 stopvs)
Lekensteyn

Benim durumumda umaskenvvars için bir ayar ekliyordum ve hatta yeniden başlattıktan sonra bile apache2ctl restarthala işe yaramadı, ancak kullanarak yeniden başlatma service apache2 restartişe yaramadı (işe service apache2 gracefulyaramadı).
Matt Browne

apachectl yerine servis kullanılması önerilir, ancak servis komutuna bağlı olmayan apachectl -S gibi komutları kullanmanız gerekiyorsa ... Bu cevap harika. upvote
Feida Kila

Bilginize: Eklemeleri /etc/init.d apache2 reloadalmayacaksınız envvars, sunucuyu durdurup başlatmalısınız
ThaDon

7

Gönderen http://httpd.apache.org/docs/2.2/configuring.html :

Kabuk ortamı değişkenlerinin değerleri, yapılandırma dosyası satırlarında $ {ENVVAR} sözdizimi kullanılarak kullanılabilir. "ENVVAR" geçerli bir ortam değişkeninin adı ise, bu değişkenin değeri yapılandırma dosyası satırındaki o noktaya değiştirilir ve işleme, bu metin doğrudan yapılandırma dosyasında bulunmuş gibi devam eder. (ENVVAR değişkeni bulunmazsa, "$ {ENVVAR}" karakterleri yapılandırma dosyası işlemenin sonraki aşamalarında kullanılmak üzere değiştirilmez.)

Yani, değişken gerçekten de beklendiği gibi ortamdan alınır. Şimdi bu nerede oluyor?

In /etc/init.d/apache2, initscript yolunu temel APACHE_ENVVARSalan envvarsdosyanın yoluna ayarlanır . Genellikle APACHE_ENVVARS=/etc/apache2/envvarsayarlanmaya neden olur. Şimdi, bu değer ayarlanan varsayılan değerlere eşit olduğundan, apache2ctldışa aktarılmaz.

Gönderen /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

Açıklama: APACHE_ENVVARSboşsa, varsayılan yolu kullanın /etc/apache2/envvars. Bu dosya varsa "kaynakla" (geçerli ortamda o dosyadan komutları çalıştır).

envvarsDosyanın sözdizimi hatası içermediğinden emin olun . Böyle bir kontrol yapmak için şunu kullanın:

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

Hatalar varsa yazdırılır.


Denetimi yaptım ve envvarlarımın herhangi bir sözdizimi hatası içermediğini doğrulayabilirim. Bir çözüm buldum; aşağıdaki cevabımı gör.
Avery Chan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.