apache2 не запускается при загрузке. Даже если настроен на уровне запуска

На моем Ubuntu 10.04.4 установлен сервер apache2 2.2.14. Несколько месяцев назад запуск apache2 при загрузке работал нормально.

Теперь я обнаружил, что после перезагрузки apache2 больше не запускается автоматически.

Сценарий init.d присутствует и должен быть тем из установки по умолчанию:

root@ser:~# ls /etc/init.d | grep apache
apache2

также запускаются уровни запуска (используя update-rc.d apache2 defaults):

root@ser:~# find /etc/rc* -name *apache*
/etc/rc0.d/K20apache2
/etc/rc1.d/K20apache2
/etc/rc2.d/S20apache2
/etc/rc3.d/S20apache2
/etc/rc4.d/S20apache2
/etc/rc5.d/S20apache2
/etc/rc6.d/K20apache2

Проверка состояния после перезагрузки приводит к:

root@ser:~# service apache2 status
Apache is NOT running.

ps aux | grep apache тоже пусто.

Глядя в /var/log/apache/error.log нет никаких записей во время загрузки. cat /var/log/syslog | grep apache также пуст и системный журнал не содержит подозрительных записей.

Запуск apache после загрузки вручную с service apache2 start работает нормально и не выдает никаких ошибок.

Обновление 1:/etc/init.d/apache2 скрипт имеет следующий заголовок / требования:

### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop apache2 web server
### END INIT INFO

И запускаемые услуги:

root@ser:~# ls /etc/rc2.d/
README           S10sysklogd  S20apache2 S20denyhosts  S20hashcash-milter  S20ido2db     S20modules_dep.sh  S20postfix  S20saslauthd  S20vzquota  S50rsync     S99rc.local
S09hostname_vps  S15bind9     S20exim4      S20icinga           S20memcached  S20opendkim        S20psad     S20xinetd   S23ntp      S99ondemand

Как я могу узнать, почему apache2 не запускается при загрузке?

1 ответ

Решение

Нашел проблему:

Вкратце: моя веб-страница пыталась подключиться к MySQL, но MySQL в это время не работал. Таким образом, Apache не удалось запустить.

Я изменил следующую строку в /etc/init.d/apache2 войти проблема запуска в системный журнал:

if $APACHE2CTL start; then

в

if $APACHE2CTL  -k start -e Debug 2>&1 | logger -t "apache_start"; then

После загрузки проверьте ваш /var/log/syslog для записей, начинающихся с apache_start,

Следующая проблема: как я могу заставить apache запускаться после mysql. Смотрите здесь: принудительный запуск apache после mysql


Дополнительная информация: я использую Perl Catalyst Framework.

Вот вывод ошибки из скрипта apache init:

DBI connect('database:localhost:3306','User',...) failed: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) at /usr/local/share/perl/5.10.1/Catalyst/Plugin/I18N/DBI.pm line 196.
Syntax error on line 10 of /etc/apache2/sites-available/mysite:
Can't call method "disconnect" on an undefined value at /usr/local/share/perl/5.10.1/Catalyst/Plugin/I18N/DBI.pm line 263, <DATA> line 998.\nCompilation failed in require at (eval 4) line 3, <DATA>  line 998.\n

Я думаю, что ошибка синтаксиса вызвана предыдущей ошибкой. Потому что строка 10 это:

PerlModule CatalystPageName

и работает нормально, если MySQL работает.

Я еще не выяснил, почему модуль локализации подключается при запуске. У нас есть другие веб-страницы с тем же модулем, которые не имеют этой проблемы / подключаются при запуске. Поскольку он не может подключиться, последующее отключение вызывает в Perl исключение, которое прерывает команду запуска apache2crl. (Это то, что я думаю)

Другие вопросы по тегам