Como escrever um script de shell para reiniciar o Apache se o `servidor atingiu MaxClients`

Como escrever um script de shell para reiniciar o Apache se o `servidor atingiu MaxClients`

Recentemente, meu blog sempre fechou, ele usa arquivos centos6.2+apache2.2+mysql5.5+php5.3. Eu criei MaxClientsem httpd.conf, mas menos útil.

Então é possível escrever um script de shell (executar com crontab a cada 10 minutos), para ler o httpd/error_log, se a última mensagem preg_match sending a SIGTERMreiniciar o apache automaticamente?

Responder1

Analisar os arquivos de log pode ser bastante complicado. Em vez de tentar fazer isso, provavelmente seria melhor usar um script como este, que pode ser executado a partir de uma entrada do crontab. Este script tentará acessar o servidor; se não tiver sucesso, reiniciará o Apache.

Roteiro

Fonte do roteiro:script bash para reiniciar o Apache automaticamente

#!/bin/sh
# Script that checks whether apache is still up, and if not:
# - e-mail the last bit of log files
# - kick some life back into it
# -- Thomas, 20050606

PATH=/bin:/usr/bin
THEDIR=/tmp/apache-watchdog
[email protected]
mkdir -p $THEDIR

if ( wget --timeout=30 -q -P $THEDIR http://localhost/robots.txt )
then
    # we are up
    touch ~/.apache-was-up
else
    # down! but if it was down already, don't keep spamming
    if [[ -f ~/.apache-was-up ]]
    then
        # write a nice e-mail
        echo -n "apache crashed at " > $THEDIR/mail
        date >> $THEDIR/mail
        echo >> $THEDIR/mail
        echo "Access log:" >> $THEDIR/mail
        tail -n 30 /var/log/apache2_access/current >> $THEDIR/mail
        echo >> $THEDIR/mail
        echo "Error log:" >> $THEDIR/mail
        tail -n 30 /var/log/apache2_error/current >> $THEDIR/mail
        echo >> $THEDIR/mail
        # kick apache
        echo "Now kicking apache..." >> $THEDIR/mail
        /etc/init.d/apache2 stop >> $THEDIR/mail 2>&1
        killall -9 apache2 >> $THEDIR/mail 2>&1
        /etc/init.d/apache2 start >> $THEDIR/mail 2>&1
        # send the mail
        echo >> $THEDIR/mail
        echo "Good luck troubleshooting!" >> $THEDIR/mail
        mail -s "apache-watchdog: apache crashed" $EMAIL < $THEDIR/mail
        rm ~/.apache-was-up
    fi
fi

rm -rf $THEDIR

Caminhos

Os caminhos para os scripts de parada/inicialização precisarão ser ajustados de acordo com o local onde sua distribuição instalou o Apache. Linhas como esta:

        /etc/init.d/apache2 start >> $THEDIR/mail 2>&1

Se você estiver no CentOS será assim:

        /etc/init.d/httpd start >> $THEDIR/mail 2>&1

Nome do executável

O mesmo acontece com as killlalllinhas. O nome do executável no CentOS é httpd.

A entrada do crontab

Este cron precisará ser executado como root para que tenha as permissões apropriadas para parar/iniciar o Apache.

informação relacionada