La variable de configuración de Apache2 no está definida


65

Instalé apache2 en ubuntu 13.10. Si trato de reiniciarlo usando

sudo /etc/init.d/apache2 restart

Recibo este mensaje:

AH00558: apache2: no se pudo determinar de manera confiable el nombre de dominio completo del servidor, utilizando 127.0.1.1. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

Entonces leí que debería editar mi httpd.confarchivo. Pero, como no puedo encontrarlo en la /etc/apache2/carpeta, intenté localizarlo usando este comando:

/usr/sbin/apache2 -V

Pero el resultado que obtengo es este:

[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Fri Nov 29 17:35:43.942560 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Fri Nov 29 17:35:43.942602 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Fri Nov 29 17:35:43.942613 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Fri Nov 29 17:35:43.942627 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.947913 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948051 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948075 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined

AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

La línea 74 de /etc/apache2/apache2.confes esta:

Mutex file:${APACHE_LOCK_DIR} default

Eché un vistazo a mi /etc/apache2/envvararchivo, pero no sé qué hacer con él.

¿Qué tengo que hacer?


¿Qué hay en su archivo envvars?
etagenklo

Respuestas:


60
[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined

Este mensaje se muestra porque ejecutó directamente el binario apache2. En Ubuntu / Debian, la configuración de apache se basa en el archivo envvar que solo está activado.

Si comienza apache con el script de inicio o apachectl.

Su problema original es que no tiene un nombre de host adecuado (fqdn) para su máquina.

Si no se puede cambiar, cambiar la ServerNamevariable en la /etc/apache2/apache2.confque localhosto su preferida FQDN.


1
Tienes razón sobre el guión de inicio. Luego agregué ServerName localhosta apache2.conf(porque httpd.confno siempre se usa en Ubuntu) y ahora todo funciona como debería. ¿Podría agregar detalles a sus respuestas para que pueda marcarlo como aceptado?
Kurt Bourbaki el

1
al apache2ctlprincipio no funcionó para mí, tuve que usar el servicio :sudo service apache2 restart
Édouard Lopez el

Pero, ¿por qué rompieron el apache2comando en primer lugar?
reinierpost

2
Esta solución solo resuelve AH00558: apache2: Could not reliably determine the server's fully qualified domain namepero no resuelve Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac

Para mí también veo el mismo problema.
indianwebdevil

84

Obtenga sus envvadores ejecutándolo así:

source /etc/apache2/envvars

y entonces

/usr/sbin/apache2 -V

Deberías obtener:

el@apollo:/home/el$ apache2 -V
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Apr  3 2014 12:20:28
Server's Module Magic Number: 20120211:27
Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

/etc/apache2/envvarsno existe
Mark Richman

66
El archivo existe en mi sistema ubuntu, pero el shell no lo reconoce como un script de shell, así que necesito esto: source / etc / apache2 / envvars; apache2 -V
Ben Crowell

66
Podría usar en apachectl -Vlugar de cargar las variables de entorno manualmente.
Sam Sehnert

Si aún no funciona, intente source /etc/apache2/envvars && sudo -E apache2 -Vo inicie sesión como lo roothace según la respuesta anterior. El aprovisionamiento de apache2 env a un usuario normal que luego necesita usar sudo no funcionará sin "-E". Los permisos de usuario normales no pueden leer la carpeta privada del certificado, entre otros problemas. Obtendrás un error. Debe sudo -E o ejecutar completamente en la cuenta raíz.
bshea

Esto es muy útil para ejecutar Apache como un cmd de primer plano de Docker. Por ejemploCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack el

7

Comprueba tu /etc/apache2/envvarsAPACHE_LOCK_DIR. En mi Ubuntu 12.04, esto es /var/lock/apache2$SUFFIX, SUFFIX normalmente está vacío.

Compruebe si el directorio existe y se puede escribir.

¿Puede ser que el archivo envvars no se obtenga correctamente? Si echas un vistazo /etc/init.d/apache2, puedes ver que se originó.

Mi (predeterminado) /etc/apache2/envvars:

# envvars - default environment variables for apache2ctl

# this won't be correct after changing uid
unset HOME

# for supporting multiple apache2 instances
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
    SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
    SUFFIX=
fi

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

## The command to get the status for 'apache2ctl status'.
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
#export APACHE_LYNX='www-browser -dump'

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

Si nada funciona, intentaría reinstalar los paquetes.


2

Como dijo otro, debe cargar (fuente) su entorno antes de ejecutarlo directamente Otra opción es usar: apache2ctlpor ejemplo

sudo apache2ctl -S

deshacerse de mis anfitriones


2

TL; DR; Debes comenzar apache2 usando lo que ya tienes:

sudo /etc/init.d/apache2 {start|stop|restart}

Detallado:

AH00558: apache2: no se pudo determinar de manera confiable el nombre de dominio completo del servidor, utilizando 127.0.1.1. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

Este mensaje significa que necesita definir su nombre de servidor / nombre de dominio. No es esencial hacerlo para un host local / prueba de producción, no necesita preocuparse por eso.

Cuando intente ejecutarlo de otra manera, usando solo apache2, obtendrá esos mensajes de error debido a lo que se dijo antes: las variables de entorno se definen cuando comienza a usar el script predeterminado init.d.


-1

Quizás esto resuelva tu problema

sudo bash -c '. /etc/apache2/envvars ; apache2'

1
lea primero, ya se proporcionó exactamente esta línea y también se explicó por qué no es una respuesta correcta.
asdmin

-2

Necesita actualizar DocumentRoot de /var/www/htmla/var/www

Edite el archivo /etc/apache2/sites-available/000-default.conf de la siguiente manera

DocumentRoot /var/www

-2

Esto funciona para mi

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"

En la pregunta, había un problema (un mensaje de error sobre ServerName) y un método de depuración fallido (que es causado por no obtener las variables de entorno). Su respuesta aborda el método de depuración, y no la pregunta.
asdmin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.