O Apache está em execução; no entanto, ele informa que não é, e não irá reiniciar

2

O Apache está em execução; no entanto, informa que não é e não será reiniciado.

# /etc/init.d/httpd status
httpd.worker is stopped

# /usr/sbin/lsof -iTCP:80 
COMMAND    PID   USER   FD   TYPE DEVICE SIZE NODE NAME
httpd.wor 1169   root    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1211 daemon    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1213 daemon    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1215 daemon    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1352 daemon    3u  IPv6   2974       TCP *:http (LISTEN)

#/etc/init.d/httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd: [Wed Mar 24 10:33:51 2010] [warn] module proxy_ajp_module is already loaded, skipping
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

OS: Linux DISTRO: CENTOS 5
Reiniciar o servidor não ajudou, nem matou o apache e o iniciou.

Alguma ideia do que está causando essa inconsistência?

    
por solo 24.03.2010 / 15:38

4 respostas

2

Usualmente, os scripts init.d usam arquivos para armazenar os PIDs dos daemons iniciados, por exemplo, /var/run/httpd.pid ou algo similar. Pode ser que o script armazene o PID errado, ou um PID obsoleto, ou haja um problema de permissão, e o script não pode criar o arquivo em primeiro lugar.

    
por 24.03.2010 / 16:22
1

Eu estou supondo que você tenha um arquivo PID obsoleto de um lançamento anterior do Apache. Eu não tenho acesso a um sistema CentOS, mas na minha máquina Fedora 11 esse arquivo está em /var/run/httpd/httpd.pid - você pode verificar sua localização procurando por "pidfile" em /etc/init.d / httpd (suponho que você esteja usando uma versão do Apache instalada a partir do RPM; se não tiver e você tiver o apache em / usr / local / apache2 ou similar, o arquivo PID entrará em / usr / local / apache2 / logs). / p>

Pare o Apache, exclua o arquivo PID obsoleto, reinicie e você deverá estar OK.

    
por 24.03.2010 / 16:22
1

O arquivo init.d normalmente é apenas um script de shell - é provável que você esteja chamando apachectl para iniciar e parar o processo. Verifique se o comando está sendo enviado para interromper o processo e veja o que acontece quando você tenta executar qualquer comando que use diretamente, sem o arquivo init.d.

Se isso ainda não funcionar, verifique os registros de erros do seu servidor da Web para ver se há algo útil lá.

Para depuração, você também pode tentar enviar usando o comando apachectl graceful - ele recarregará a configuração e reiniciará os processos filhos sem remover o processo principal. (o problema é que isso significa que há algumas alterações de configuração que não serão efetivadas, mas, a menos que você esteja fazendo ajustes, provavelmente não importará)

    
por 24.03.2010 / 16:40
1

Eu estou supondo que você tem dois scripts init diferentes iniciando o apache, e que os diferentes scripts init estão usando diferentes arquivos-pid.

O que acontece se você usar killall -9 httpd e depois iniciar o Apache por meio de /etc/init.d/httpd start ?

    
por 29.07.2011 / 21:03