Como escrever um script de shell reinicie o apache se 'o servidor tiver atingido MaxClients'

2

Recentemente, meu blog sempre encerra, usa centos6.2+apache2.2+mysql5.5+php5.3 . Eu criei MaxClients em httpd.conf , mas menos útil.

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

    
por yuli chika 05.10.2013 / 16:47

1 resposta

2

A análise dos arquivos de log pode ser bastante complicada. Em vez de tentar fazer isso, você provavelmente seria melhor usar um script como este que pode ser executado a partir de uma entrada crontab. Este script tentará acessar o servidor, se for malsucedido, ele reiniciará o Apache.

Script

Fonte de script: 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 stop / start precisarão ser ajustados de acordo com o local onde sua distro instalou o Apache. Linhas como esta:

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

Se você está no CentOS, será assim:

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

Nome do executável

O mesmo acontece com as linhas killlall . 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.

    
por 05.10.2013 / 17:12