apache2 não inicia na inicialização. Mesmo se configurado em runlevels

2

No meu servidor Ubuntu 10.04.4 apache2 2.2.14 está instalado. Alguns meses atrás, iniciar o apache2 na inicialização funcionou bem.

Agora descobri que, após uma reinicialização, o apache2 não é iniciado automaticamente.

O script init.d está presente e deve ser o da instalação padrão:

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

as startups de runlevel também são definidas (usando 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

A verificação do status após a reinicialização resulta em:

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

ps aux | grep apache também está vazio.

Olhando para /var/log/apache/error.log , não há entradas no momento da inicialização. cat /var/log/syslog | grep apache também está vazio e o syslog não contém entradas suspeitas.

Iniciar o apache após a inicialização manualmente com service apache2 start funciona bem e não gera erros.

Atualização 1: O script /etc/init.d/apache2 tem o seguinte cabeçalho / requisitos:

### 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

E os serviços iniciados são:

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

Como posso descobrir por que o apache2 não está sendo iniciado na inicialização?

    
por SailAvid 05.06.2013 / 14:52

1 resposta

0

Encontrou o problema:

Em suma: minha página web tentou se conectar ao MySQL, mas o MySQL não estava rodando no momento. Assim, o apache falhou ao iniciar.

Alterei a linha a seguir em /etc/init.d/apache2 para registrar o problema de inicialização no syslog:

if $APACHE2CTL start; then

para

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

Após a inicialização, verifique seu /var/log/syslog das entradas que começam com apache_start .

O próximo problema: como posso forçar o apache a iniciar após o mysql? Veja aqui: Forçar o início do apache após o mysql

Informação adicional: Eu uso o Perl Catalyst Framework.

Aqui está a saída de erro do script de inicialização do 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

Acho que o erro de sintaxe é causado pelo erro anterior. Porque a linha 10 é:

PerlModule CatalystPageName

e funciona bem se o mysql estiver rodando.

Ainda não descobri por que o módulo de localização se conecta na inicialização. Temos outras páginas da Web com o mesmo módulo que não têm esse problema / conectam na inicialização. Como não é possível conectar uma desconexão a seguir, causa uma exceção no Perl que anula o comando apache2crl start. (Isso é o que eu acho)

    
por 05.06.2013 / 20:49