Como reiniciar automaticamente o serviço Apache após o erro HTTP 503?

1

Nosso servidor de produção está executando o Apache v2.2.4 no CentOS 5.2. O Mono v1.2.4 está integrado ao Apache.

Recentemente, enfrentamos um problema em nosso servidor de produção. Do access_log do Apache, encontrei um erro de servidor interno HTTP 500 para uma solicitação HTTP e todas as solicitações HTTP subsequentes também falharam, mas com o erro HTTP 503 service indisponível. A partir de então, nenhuma das solicitações foi bem-sucedida. Além disso, somente mais tarde, percebemos que nosso aplicativo não estava funcionando devido a esse erro e, em seguida, reiniciámos o serviço Apache.

Minhas perguntas são,

  1. neste tipo de situação, como reinicio automaticamente o serviço Apache quando o erro HTTP 503 é encontrado? Existe alguma diretiva do Apache disponível para definir?
  2. em geral, o que causaria um erro HTTP 503 no Apache?

NOTA: Mono ajuda na execução de aplicativos desenvolvidos em .NET em um sistema operacional baseado em Linux.

EDITAR: Concordo em encontrar a causa raiz desse problema. Na verdade, estamos analisando isso também. Até resolvê-lo, estou descobrindo se isso poderia ser reiniciado imediatamente por conta própria, sem ter qualquer interrupção de serviço / inatividade para os usuários do aplicativo.

    
por Gnanam 18.02.2011 / 11:40

6 respostas

2

Os erros 503 normalmente estão relacionados a erros em um aplicativo sendo exibido ou a um erro de configuração. Ele deve estar no log de erros do apache (se você não tiver um log de erros, ative-o na configuração com o ErrorLog diretiva e controle o nível de registro de erros desejado com LogLevel ).

Você pode usar monit para verificar uma página e ver se o código HTTP de uma determinada página está ok, e o que fazer se não (como reiniciar o apache).

    
por 18.02.2011 / 11:52
2

Eu não acho que você pode ou deveria. É muito melhor deixar o servidor como está e tentar encontrar a raiz do problema. IMHO, reiniciando em erro é uma má política em geral.

Se você ainda insistir, tente procurar algo como SWATCH para monitorar seus registros do apache e agir em um erro 503.

    
por 18.02.2011 / 13:22
2

você deve realmente corrigir o problema, mas pode executar algo assim para uma solução temporária:

#!/bin/sh                                                                                                            
HTTP_STATUS='lynx -head -source http://mysite.com |head -1 |awk '{print $2}''                             
if [ "$HTTP_STATUS" = "503" ]                                                                                       
then                                                                                                                 
        /etc/init.d/http restart                                                                                   
fi                                                                                                                   
    
por 18.02.2011 / 14:09
1

Você pode ter algo parecido com o seguinte no seu httpd.conf :

ErrorDocument 500 /cgi-bin/handle-500-error.pl

Isso chamaria um script sempre que um erro fosse encontrado e configuraria isso para reiniciar o servidor.

    
por 24.12.2011 / 16:36
0

Encontrei um erro 503 quando algo em que estou fazendo proxy reverso atrás do Apache está inativo. Reiniciar o serviço que está em proxy invertido o corrige, mas esse erro é esperado se eu desligar esse serviço.

Talvez alguma extensão esteja tentando entrar em contato com outro serviço que não está sendo executado ou está expirando.

    
por 18.02.2011 / 13:26
0

Isso é o que eu entendo que você quer:

Você quer algo para monitorar o log e, instantaneamente, reiniciar o apache, se ocorrer um erro específico. Você não quer sondar a cada minuto, apenas observe o log.

Você pode conseguir isso, mas pode causar um problema de desempenho, embora isso não lhe custe muito poder de servidor.

No entanto! Geralmente, isso não é uma boa ideia, já que algumas pessoas poderiam descobrir o que você estava procurando no arquivo de log e continuar cometendo erros 404 com essa sequência no final do URL. Mas:

Edite o arquivo de configuração e canalize o log de erros para um script, como:

ErrorLog "| /bin/bash /scripts/logMonitor.sh"

Em seguida, crie esse script e pode ser algo assim:

#!/bin/bash

while read input; do

  if [[ $input == *someError* ]]; then
    echo "--- ERROR REGISTERED - RESTARTING APACHE ---" >> /tmp/err.log
    /etc/init.d/apache2 restart
  fi    

  # Always log what is thrown at us.
  echo "$input" >> /tmp/err.log

done

Isso vai fazer o que você pede, mas é feio e não é recomendado.

    
por 18.02.2011 / 18:09