Apache2-Konfigurationsvariable ist nicht definiert

65

Ich habe Apache2 auf Ubuntu 13.10 installiert. Wenn ich versuche, es mit neu zu starten

sudo /etc/init.d/apache2 restart

Ich erhalte diese Nachricht:

AH00558: apache2: Mit 127.0.1.1 konnte der vollständig qualifizierte Domänenname des Servers nicht zuverlässig ermittelt werden. Setzen Sie die Anweisung 'ServerName' global, um diese Nachricht zu unterdrücken

Also habe ich gelesen, dass ich meine httpd.confDatei bearbeiten soll . Da ich es jedoch nicht im /etc/apache2/Ordner finden kann , habe ich versucht, es mit dem folgenden Befehl zu finden:

/usr/sbin/apache2 -V

Aber die Ausgabe, die ich bekomme, ist die folgende:

[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}

Zeile 74 von /etc/apache2/apache2.conflautet wie folgt:

Mutex file:${APACHE_LOCK_DIR} default

Ich habe mir meine /etc/apache2/envvarAkte angesehen, weiß aber nicht, was ich damit anfangen soll.

Was soll ich machen?

Kurt Bourbaki
quelle
Was ist in Ihrer envvars-Datei?
Etagenklo

Antworten:

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

Diese Meldung wird angezeigt, weil Sie die Apache2-Binärdatei direkt ausgeführt haben. In Ubuntu / Debian basiert die Apache-Konfiguration auf der Envvar-Datei, die nur aktiviert ist.

Wenn Sie Apache mit dem Init-Skript oder Apachectl starten.

Ihr ursprüngliches Problem ist, dass Sie keinen richtigen Hostnamen (fqdn) für Ihren Computer haben.

Wenn Sie es nicht ändern können, ändern Sie die ServerNameVariable in /etc/apache2/apache2.confzu localhostoder Sie den gewünschten FQDN.

ah83
quelle
1
Sie haben Recht mit dem Init-Skript. Dann habe ich ServerName localhostauf apache2.conf(weil httpd.confnicht immer auf Ubuntu verwendet) und jetzt alles funktioniert , wie es sollte. Könnten Sie bitte Details zu Ihren Antworten hinzufügen, damit ich sie als akzeptiert kennzeichnen kann?
Kurt Bourbaki
1
angefangen mit apache2ctlhat bei mir nicht funktioniert, ich musste den Service nutzen :sudo service apache2 restart
Édouard Lopez
Aber warum haben sie das apache2Kommando überhaupt gebrochen?
Reinierpost
2
Diese Lösung löst AH00558: apache2: Could not reliably determine the server's fully qualified domain namenur, aber nicht Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac
Für mich sehe ich auch das gleiche Problem.
Indianwebdevil
84

Beschaffe deine Envvars, indem du es so ausführst:

source /etc/apache2/envvars

und dann

/usr/sbin/apache2 -V

Du solltest bekommen:

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"
nadavkav
quelle
/etc/apache2/envvarsexistiert nicht
Mark Richman
6
Die Datei existiert auf meinem Ubuntu-System, aber die Shell erkennt sie nicht als Shell-Skript. Deshalb benötige ich Folgendes: source / etc / apache2 / envvars; Apache2-V
Ben Crowell
6
Konnte nur verwenden, apachectl -Vanstatt die Umgebungsvariablen manuell zu laden.
Sam Sehnert
Wenn es immer noch nicht funktioniert, versuchen Sie es source /etc/apache2/envvars && sudo -E apache2 -Voder melden Sie sich wie rootoben beschrieben an. Das Sourcing der Apache2-Umgebung an einen regulären Benutzer, der dann sudo verwenden muss, funktioniert ohne "-E" nicht. Normale Benutzerrechte können unter anderem den privaten Ordner des Zertifikats nicht lesen. Sie erhalten eine Fehlermeldung. Sie müssen sudo -E oder vollständig unter dem Root-Account ausführen.
bshea
Dies ist sehr nützlich, um Apache als Docker-Vordergrund-Cmd auszuführen. ZBCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack
7

Überprüfen Sie Ihr /etc/apache2/envvarsAPACHE_LOCK_DIR. In meinem Ubuntu 12.04 ist dieses /var/lock/apache2$SUFFIXSUFFIX normalerweise leer.

Überprüfen Sie, ob das Verzeichnis vorhanden und beschreibbar ist.

Kann es sein, dass die envvars-Datei nicht korrekt bezogen wurde? Wenn Sie einen Blick darauf werfen /etc/init.d/apache2, können Sie sehen, dass es bezogen wurde.

Meine (Standard) /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'

Wenn nichts funktioniert, würde ich versuchen, die Pakete neu zu installieren.

erny
quelle
2

Wie andere schon gesagt, müssen Sie (Quelle) Ihre Umgebung laden , bevor es läuft direkt Eine weitere Option ist das : apache2ctlzB

sudo apache2ctl -S

meine Gastgeber zu entleeren

amd
quelle
2

TL; DR; Sie sollten Apache2 mit dem starten, was Sie bereits haben:

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

Detailliert:

AH00558: apache2: Mit 127.0.1.1 konnte der vollständig qualifizierte Domänenname des Servers nicht zuverlässig ermittelt werden. Setzen Sie die Anweisung 'ServerName' global, um diese Nachricht zu unterdrücken

Diese Meldung bedeutet, dass Sie Ihren Servernamen / Domainnamen definieren müssen. Es ist nicht unbedingt erforderlich, dies für einen lokalen Host / Test der Produktion zu tun. Sie müssen sich keine Gedanken darüber machen.

Wenn Sie versuchen, es auf die andere Art und Weise auszuführen apache2, erhalten Sie diese Fehlermeldungen aufgrund der zuvor genannten Informationen: Die Umgebungsvariablen werden definiert, wenn Sie das Standardskript in verwenden init.d.

George
quelle
-1

Vielleicht löst dies Ihr Problem

sudo bash -c '. /etc/apache2/envvars ; apache2'
Eugen Konkov
quelle
1
lese zuerst, genau diese zeile wurde schon zur verfügung gestellt und es wurde auch erklärt, warum es keine richtige antwort ist.
Asdmin
-2

Sie müssen den DocumentRoot von /var/www/htmlauf aktualisieren/var/www

Bearbeiten Sie die Datei /etc/apache2/sites-available/000-default.conf wie folgt

DocumentRoot /var/www
user219404
quelle
-2

Das funktioniert bei mir

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"
Lihnjo
quelle
In der Frage gab es ein Problem (eine Fehlermeldung zu ServerName) und eine fehlerhafte Debug-Methode (die darauf zurückzuführen ist, dass die Umgebungsvariablen nicht bezogen wurden). Ihre Antwort bezieht sich auf die Debug-Methode und nicht auf die Frage.
Asdmin