Apache 2 на виртуальной машине * иногда * не находит каталог с включенными модами

Я запускаю Apache 2 на виртуальной машине сервера Ubuntu 10.04 (ESXi 4.1) и получаю что-то очень странное:

Иногда можно найти каталог с включенными модами.
Иногда это не так. Вроде не около 75% не найдено.
Ничего не изменилось между ними.

Вот несколько выдержек из error.log в сочетании с командными строками, чтобы продемонстрировать, что происходит:

Итак, я начинаю с остановки Apache, чтобы упростить поиск информации в журнале:

CMDLN: root@bunny:/etc/apache2# apache stop  
APWARN: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName  
ERRLOG: [Tue Feb 15 11:45:40 2011] [notice] caught SIGTERM, shutting down  

Потом запускаю:

CMDLIN: root@bunny:/etc/apache2# apache start
APWARN: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
ERRLOG: [Tue Feb 15 11:46:09 2011] [notice] Apache/2.2.14 (Ubuntu) proxy_html/3.0.1 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

Затем перезапускаю:

CMDLIN: root@bunny:/etc/apache2# apache restart
APWARN: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
ERRLOG: [Tue Feb 15 11:46:15 2011] [notice] SIGHUP received.  Attempting to restart

Затем я меняю каталог на один, чтобы проверить теорию, в которой используется мой путь к оболочке

CMDLIN: root@bunny:/etc/apache2# cd ..
CMDLIN: root@bunny:/etc# apache restart
APWARN: apache2: Syntax error on line 33 of /etc/apache2/apache2.conf: Include directory 'mods-enabled' not found
ERRLOG: apache2: Syntax error on line 33 of /etc/apache2/apache2.conf: Include directory 'mods-enabled' not found

Похоже, пока ... вроде как ..

CMDLIN: root@bunny:/etc# apache restart
APWARN: apache2: Syntax error on line 33 of /etc/apache2/apache2.conf: Include directory 'mods-enabled' not found

По-прежнему выглядит так, но на этот раз без ошибок журнала. Вернитесь в каталог apache и попробуйте снова

CMDLIN: root@bunny:/etc# cd apache2/
CMDLIN: root@bunny:/etc/apache2# apache restart
APWARN: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
APWARN: httpd not running, trying to start
ERRLOG: [Tue Feb 15 11:46:30 2011] [warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
ERRLOG: [Tue Feb 15 11:46:30 2011] [notice] Apache/2.2.14 (Ubuntu) proxy_html/3.0.1 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

Хм, похоже, это все, да? А почему ... не знаю ...

Еще один хороший перезапуск, кроме DNS ...

CMDLIN: root@bunny:/etc/apache2# apache restart
APWARN: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
ERRLOG: [Tue Feb 15 11:46:36 2011] [notice] SIGHUP received.  Attempting to restart

Пока все хорошо ... подождите ... К сожалению, это отображается в журнале, пока я не менял каталоги, пока Apache пытается запуститься, но вместо этого завершает работу.

ERRLOG: apache2: Syntax error on line 33 of /etc/apache2/apache2.conf: Include directory 'mods-enabled' not found

Я иду перезапускать его и ...

CMDLIN: root@bunny:/etc/apache2# apache restart
APWARN: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
APWARN: httpd not running, trying to start
ERRLOG: [Tue Feb 15 11:46:45 2011] [warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
ERRLOG: [Tue Feb 15 11:46:45 2011] [notice] Apache/2.2.14 (Ubuntu) proxy_html/3.0.1 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

И это резервное копирование. И я сбита с толку.

Я понятия не имею, почему это происходит, и не имеет смысла делать это. Мой инстинкт подсказывал мне, что он каким-то образом не идет по правильному пути и ожидал, что по какой-то причине включенные моды будут относиться к тому месту, где был я в моей оболочке ... и хотя это само по себе были волосатыми, стало еще хуже, когда Apache отключился прямо посреди работы из-за той же "ошибки"

Вот мой httpd.conf:

<Location ~ "/ws/?.*$">
    SetHandler perl-script
    PerlResponseHandler Webservices::Qmedtrix
</Location>

<Directory /var/www>
    Options +ExecCGI +Includes
</Directory>

<Directory /usr/share>
    Options ExecCGI FollowSymlinks Indexes
</Directory>

ProxyPass /group http://localhost:8080/group
ProxyPassReverse /group http://localhost:8080/group

Вот мой apache2.conf:

LockFile ${APACHE_LOCK_DIR}/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

StartServers          2
MinSpareThreads      25
MaxSpareThreads      75
ThreadLimit          64
ThreadsPerChild      25
MaxClients          150
MaxRequestsPerChild   0

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

AccessFileName .htaccess

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

DefaultType text/plain
HostnameLookups On
ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn

Include mods-enabled/*.load
Include mods-enabled/*.conf

Include httpd.conf
Include ports.conf

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Include conf.d/

Include sites-enabled/

А вот мой виртуальный домен по умолчанию:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DirectoryIndex index.shtml index.html

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews +Includes +ExecCGI
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

и мой файл envars:

#unset HOME
# I have tried the above line enabled and not, no difference.

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

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
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
export LANG=C
export LANG

Я в тупике.

Есть идеи, что здесь происходит?


person Dodger    schedule 15.02.2011    source источник
comment
После еще нескольких экспериментов я получил общее представление о том, что происходит, но не знаю, почему и как это исправить. Похоже, что если я запускаю apache из любого каталога, ДРУГОГО, кроме / etc / apache2 (где подключаемые каталоги относятся к '.'), Он терпит неудачу. Он также терпит неудачу каждый раз, когда я отправляю SIGHUP (либо через перезапуск apache2ctl, либо через kill -HUP родительскому процессу), но НЕ, когда я запускаю его в этом каталоге. Я предполагаю, что chdir apache, вероятно, будет делать с DocumentRoot, вместо этого HUP пытается перезапустить с / var / www. Но это все равно неправильно.   -  person Dodger    schedule 16.02.2011
comment
У меня тоже такое поведение. Просто чтобы вы знали, что вы не одиноки :)   -  person Layke    schedule 06.10.2011


Ответы (3)


У меня была точно такая же проблема, также на виртуальном клиенте KVM. Решением для меня было раскомментировать следующую строку:

#ServerRoot "/ etc / apache2"

Надеюсь, это поможет следующему парню, который начнет задаваться вопросом, почему он должен запускать "apache2ctl start" в каталоге "/ etc / apache2", чтобы добиться успеха;)

person Daniel Fairchild    schedule 21.03.2012

apachectl - это сценарий bash. Возможно, вы захотите отправить отчет об ошибке для этого поведения в Ubuntu BTS.

person warden    schedule 15.04.2011

Вам следует удалить строки в вашем /etc/envvars файле:

#unset HOME
# I have tried the above line enabled and not, no difference.

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

Уберите все это.

Затем также отредактируйте свои envvars, чтобы удалить суффикс $, чтобы конечный файл выглядел примерно так:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid
export APACHE_RUN_DIR=/var/run/apache2
export APACHE_LOCK_DIR=/var/lock/apache2
export APACHE_LOG_DIR=/var/log/apache2
export LANG=C
export LANG

У меня была точно такая же проблема, как и у вас. И исправил это после игры с envvars.

person Layke    schedule 05.10.2011