Httpd reiniciar o erro "Endereço já em uso"

2

Eu tenho um .rpm, que criei. Na sua parte %post , eu faço algumas coisas, e no final deste script, eu chamo service httpd restart . Dá o seguinte erro:

+ service httpd restart
Stopping httpd: [FAILED]
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:81
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:81
no listening sockets available, shutting down
Unable to open logs
[FAILED]

Eu tenho isso da instalação detalhada do rpm (-vv). Então eu sei que é sobre o httpd reiniciar-se, nada mais. De acordo com o netstat, apenas um processo (httpd) está escutando na porta 81.

$ sudo netstat -nlp | grep 81
tcp      0      0 :::81        :::*      LISTEN      29670/httpd

Não entendo, por que executar o http FAILS na parada e FALHAR novamente no início.

Alguma idéia de como resolver isso?

    
por mtndesign 15.12.2012 / 14:02

2 respostas

1

Isso é às vezes uma indicação de que o host está comprometido ou está executando um processo mal-comportado. Digo comprometida porque muitos tipos de malware se escondem no plano de fundo e ignoram os sinais. No entanto, eles normalmente não fecham os descritores de arquivos abertos que estavam presentes na bifurcação.

Isso leva a uma situação em que o soquete que foi mantido aberto pelo apache foi herdado pelo malware que ignora os sinais para concluir. Isso faz com que o problema "não é possível ligar ao endereço".

Tente emitir o comando pgrep -l -u apache e veja se algum processo é exibido que não seja o apache.

    
por 15.12.2012 / 14:23
1

O script init.d (invocado pelo comando de serviço), dependendo da implementação, não é tão inteligente quanto você acha que poderia ser. O que eu vejo em muitas dessas implementações, a execução do "start" exclui o número do processo do processo httpd original (ou seja, aquele que é executado como root). Então, quando você executa o processo 'stop', ele simplesmente está eliminando (com o número de sinal apropriado) o processo de httpd da raiz.

Às vezes, os processos escravos ficam órfãos e não são mortos (porque podem estar quebrados e não responder adequadamente ao sinal dos pais). Se este for o caso, então a porta ainda está conectada pelos processos escravos e a execução de um 'restart' ou 'start' falhará.

O que você precisa fazer é fazer um " ps -aef | grep httpd | grep -v grep " para encontrar os processos escravo rompidos e eliminá-los diretamente (usando o kill -9 pid# ). Pode haver mais de um processo quebrado.

Depois que todos os processos quebrados tiverem sido kilt, você poderá "iniciar" o servidor apache novamente.

    
por 16.12.2012 / 06:52