Pourquoi apache2 ne respecte-t-il pas mon fichier envvars?

17

Mes fichiers envvar contiennent ces lignes:

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

Mon apache2.conf contient ces lignes:

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

Mais quand je cours, apache2 -Mje reçois ceci:

apache2: bad user name ${APACHE_RUN_USER}

Un correctif temporaire consiste à coder www-dataen dur mon fichier apache2.conf. Il y avait des spéculations ici que c'était parce que certains scripts de configuration ne remplaçaient pas correctement les vars env dans mon fichier apache2.conf. Peu importe comment puis-je demander à apache2 de consulter mon fichier envvars?

Comme un autre point de données, ce site semble indiquer que les envvars sont générés lors de la construction, mais lus par apache2ctl au moment de l'exécution, ce qui suggère que ce fichier n'est pas simplement un caca laissé par le processus de construction.

Avery Chan
la source

Réponses:

30

Après avoir regardé la réponse donnée par @Lekensteyn, j'ai essayé sudo apache2ctl -Mavec mon apache2.conf revenu à l'original. Cela a fonctionné alors j'ai creusé un peu dans les pages de manuel. Voici ce que man apache2j'avais à 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.

Donc, la réponse à cette question est: vous n'utilisez pas apache2correctement; utiliser à la apache2ctlplace.

Merci @Lekensteyn de m'avoir pointé dans la bonne direction.

Avery Chan
la source
La façon encore plus correcte serait d'utiliser le script de démarrage: sudo stop apache2, sudo restart apache2et sudo start apache2( /etc/init.d/apache2 stop, etc.)
Lekensteyn
Dans mon cas umask, j'ajoutais un paramètre aux envvars, et même après avoir redémarré, apache2ctl restartcela ne fonctionnait toujours pas, mais redémarrer avec service apache2 restartfonctionnait ( service apache2 gracefulne fonctionnait pas).
Matt Browne
il est recommandé d'utiliser le service au lieu d'apachectl, mais si vous devez utiliser des commandes non liées à la commande de service, comme apachectl -S ... cette réponse est excellente. vote positif
Feida Kila
FYI: Faire un /etc/init.d apache2 reloadne ramassera pas les envvarsajouts, vous devez arrêter et démarrer le serveur
ThaDon
7

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

Les valeurs des variables d'environnement shell peuvent être utilisées dans les lignes du fichier de configuration en utilisant la syntaxe $ {ENVVAR}. Si "ENVVAR" est le nom d'une variable d'environnement valide, la valeur de cette variable est substituée à cet endroit dans la ligne du fichier de configuration et le traitement se poursuit comme si ce texte était trouvé directement dans le fichier de configuration. (Si la variable ENVVAR n'est pas trouvée, les caractères "$ {ENVVAR}" restent inchangés pour être utilisés par les étapes ultérieures du traitement du fichier de configuration.)

Ainsi, la variable est en effet récupérée de l'environnement comme prévu. Maintenant, où cela se produit-il?

Dans /etc/init.d/apache2, APACHE_ENVVARSest défini sur le chemin du envvarsfichier qui est basé sur le chemin initscript. Il en résulte généralement APACHE_ENVVARS=/etc/apache2/envvarsun réglage. Maintenant, puisque cette valeur est égale aux valeurs par défaut définies dans apache2ctl, elle n'est pas exportée.

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

Explication: si APACHE_ENVVARSest vide, utilisez le chemin par défaut qui est /etc/apache2/envvars. Si ce fichier existe, "source" (exécutez les commandes de ce fichier dans l'environnement actuel).

Assurez-vous que le envvarsfichier ne contient aucune erreur de syntaxe. Pour effectuer une telle vérification, utilisez:

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

Les erreurs sont imprimées le cas échéant.

Lekensteyn
la source
J'ai effectué la vérification et je peux vérifier que mes envvars ne contiennent aucune erreur de syntaxe. J'ai trouvé une solution; voir ma réponse ci-dessous.
Avery Chan