Назад | Перейти на главную страницу

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 не запускается при загрузке?

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

Вкратце: моя веб-страница пыталась подключиться к 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:

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. (Вот что я думаю)