Reiniciar o serviço httpd no RHEL retorna “Parando o httpd: [FAILED]” - Como corrijo isso?

4

Esta é minha primeira indicação de um problema:

$ sudo /sbin/service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd: no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]     


Eu sei que o httpd está rodando

$ ps -ef | grep httpd | grep -v grep
apache    9619 20181  0 07:08 ?        00:00:03 /usr/sbin/httpd
apache   10092 20181  0 Jan24 ?        00:00:07 /usr/sbin/httpd
apache   13086 20181  0 06:09 ?        00:00:00 /usr/sbin/httpd
apache   13717 20181  0 Jan25 ?        00:00:01 /usr/sbin/httpd
apache   14730 20181  0 07:13 ?        00:00:01 /usr/sbin/httpd
apache   16359 20181  0 09:54 ?        00:00:00 /usr/sbin/httpd
root     20181     1  0  2011 ?        00:00:01 /usr/sbin/httpd
apache   21450 20181  0 09:55 ?        00:00:00 /usr/sbin/httpd


e está usando as portas 80 e 443

$ sudo netstat -lnp | grep :80
tcp        0      0 :::80                       :::*                        LISTEN      9619/httpd
$ sudo netstat -lnp | grep :443
tcp        0      0 :::443                      :::*                        LISTEN      9619/httpd 


então eu suponho que recebo a mensagem "não há soquetes de escuta disponíveis" porque o httpd não pode parar para liberar as portas 80 e 443.


Estou usando o RHEL versão 5.7:

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.7 (Tikanga)


Eu posso ver um monte de processos em execução para o httpd:

$ pgrep httpd
9619
10092
13086
13717
14730
16359
20181
21450


O que poderia impedir que o httpd parasse? Se eu matar os processos do httpd, poderei iniciar o httpd sem problemas?

    
por ghbarratt 26.01.2012 / 18:27

3 respostas

3

A função stop em /etc/init.d/httpd usa o pidfile:

killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd

Possivelmente, o pidfile /var/run/httpd.pid está desatualizado ou ausente (você poderia ter iniciado o httpd no passado sem usar o /etc/init.d script ou service ?). Você pode verificar esse arquivo (e seu conteúdo) com seu ps -ef |grep http .

Meh, apenas sudo kill 20181 . Em seguida, inicie o serviço como faria normalmente. Então tente o reinício depois disso.

Se isso acontecer novamente, você provavelmente deve investigar por que o arquivo pid está ficando fora de sintonia com a tabela de processos.

    
por 26.01.2012 / 19:05
1

Você deve ser capaz de eliminar os processos HTTP - as conexões atuais serão interrompidas, é claro, e se alguém estiver enviando dados (digamos, enviando um formulário) que podem se perder. Mas geralmente, sim, isso vai ficar bem. A mesma coisa aconteceria com service httpd restart . Você provavelmente terá que limpar o arquivo de bloqueio em / var / lock / subsys / httpd (excluir esse arquivo).

Eu então executaria service httpd configtest para ter certeza de que sua configuração do apache é pelo menos carregável. Em seguida, tente iniciá-lo com service httpd start

Você está certo de que os erros sobre as portas que estão sendo usadas se devem ao fato de o httpd ainda estar em execução e, portanto, estarem usando essas portas. Da mesma forma, o erro de log também.

Uma outra coisa: não é necessário executar sudo para usar ps ou netstat . Adquira o hábito de usar somente sudo para as coisas que exigem isso. Isso vai lhe poupar problemas mais tarde, quando você evita executar algum comando destrutivo com privilégios de root quando não quer.

    
por 26.01.2012 / 18:37
1

Corri para similar no centos6 com o ispconfig3 e o Apache. O post do cjc me ajudou a encontrar a resposta para o meu. (obrigado!) Acontece que o caminho PID em /etc/httpd/conf/httpd.conf era diferente de /etc/init.d/httpd por algum motivo. Uma vez que eu fiz o mesmo (eu escolhi editar o httpd.conf deixando o script init.d sozinho) então matei o httpd usando o PID mostrado no ps -ef e então iniciei o httpd novamente com /etc/init.d/httpd start & voila funciona como deveria. serviço httpd status / stop / restart / iniciar todo o trabalho como esperado agora também.

Eu suspeito que o arquivo http.conf foi possivelmente substituído de um backup do centos5 ou talvez tenha sido editado em algum momento, a menos que o padrão estivesse errado, embora isso pareça improvável.

/etc/httpd/conf/httpd.conf

Before:
PidFile run/httpd.pid

After:
PidFile run/httpd/httpd.pid

/etc/init.d/httpd deu uma pista do que deveria ser:

# pidfile: /var/run/httpd/httpd.pid

No meu status mostrou Parado mesmo que o httpd tenha sido mostrado claramente em execução no ps. stop deu um erro, start deu algumas portas já em uso erro. Em retrospectiva, faz sentido agora, mas queria postar isso se alguém mais se deparar com o mesmo. stop também estava dando o httpd morto, mas subsys travaram às vezes.

Exemplo de erro que recebi:

Stopping httpd:                                            [FAILED]
Starting httpd: (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
    
por 15.09.2013 / 05:48