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