Perché apache2 non rispetta il mio file envvars?


17

I miei file envvar contengono queste righe:

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

Il mio apache2.conf contiene queste righe:

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

Ma quando corro apache2 -Mottengo questo:

apache2: bad user name ${APACHE_RUN_USER}

Una soluzione temporanea consiste nel codificare www-datanel mio file apache2.conf. Ci sono state alcune speculazioni qui sul fatto che alcuni script di configurazione non hanno sostituito correttamente le variabili env nel mio file apache2.conf. Indipendentemente da come ottengo apache2 per consultare il mio file envvars?

Come un altro punto di dati questo sito sembra indicare che envvars è generato al momento della compilazione, ma letto da apache2ctl in fase di esecuzione, suggerendo che questo file non è solo la cacca rimanente durante il processo di compilazione.

Risposte:


30

Dopo aver esaminato la risposta data da @Lekensteyn, ho provato sudo apache2ctl -Mcon il mio apache2.conf ripristinato l'originale. Questo ha funzionato così ho scavato un po 'nelle pagine man. Ecco cosa man apache2dovevo dire:

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.

Quindi, la risposta a questa domanda è: non stai usando apache2correttamente; usa apache2ctlinvece.

Grazie @Lekensteyn per avermi indicato nella giusta direzione.


Il modo ancora più corretto sarebbe utilizzando l'initscript: sudo stop apache2, sudo restart apache2e sudo start apache2( /etc/init.d/apache2 stope così via)
Lekensteyn

Nel mio caso stavo aggiungendo umaskun'impostazione a envvars e anche dopo aver riavviato l'utilizzo apache2ctl restartnon funzionava ancora, ma il riavvio con service apache2 restartfunzionava ( service apache2 gracefulnon funzionava).
Matt Browne, l'

si consiglia l'uso del servizio invece di apachectl, ma se è necessario utilizzare comandi non collegati al comando di servizio, come apachectl -S ... questa risposta è ottima. voto positivo
Feida Kila,

Cordiali saluti: Fare un /etc/init.d apache2 reloadtestamento non raccoglierà le envvarsaggiunte, devi fermarti e avviare il server
ThaDon

7

Da http://httpd.apache.org/docs/2.2/configuring.html :

I valori delle variabili di ambiente shell possono essere utilizzati nelle righe del file di configurazione utilizzando la sintassi $ {ENVVAR}. Se "ENVVAR" è il nome di una variabile d'ambiente valida, il valore di quella variabile viene sostituito in quel punto nella riga del file di configurazione e l'elaborazione continua come se quel testo fosse trovato direttamente nel file di configurazione. (Se la variabile ENVVAR non viene trovata, i caratteri "$ {ENVVAR}" rimangono invariati per essere utilizzati dalle fasi successive dell'elaborazione del file di configurazione.)

Quindi, la variabile viene effettivamente recuperata dall'ambiente come previsto. Ora dove succede?

In /etc/init.d/apache2, APACHE_ENVVARSè impostato sul percorso del envvarsfile che si basa sul percorso initscript. Di solito risulta APACHE_ENVVARS=/etc/apache2/envvarsessere impostato. Ora, poiché questo valore è uguale ai valori predefiniti impostati in apache2ctl, non viene esportato.

Da /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

Spiegazione: se APACHE_ENVVARSè vuoto, utilizzare il percorso predefinito che è /etc/apache2/envvars. Se questo file esiste, "sorgente" (esegui i comandi da quel file nell'ambiente corrente).

Assicurarsi che il envvarsfile non contenga errori di sintassi. Per eseguire tale controllo, utilizzare:

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

Eventuali errori vengono stampati.


Ho eseguito il controllo e posso verificare che i miei envvars non contengano errori di sintassi. Ho trovato una soluzione; vedi la mia risposta qui sotto.
Avery Chan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.