So schreiben Sie ein Shell-Skript zum Neustarten von Apache, wenn „der Server die maximale Anzahl an Clients erreicht hat“

So schreiben Sie ein Shell-Skript zum Neustarten von Apache, wenn „der Server die maximale Anzahl an Clients erreicht hat“

In letzter Zeit wird mein Blog immer wieder geschlossen centos6.2+apache2.2+mysql5.5+php5.3. Ich habe es MaxClientsin veröffentlicht httpd.conf, aber es ist weniger nützlich.

Ist es also möglich, ein Shell-Skript zu schreiben (alle 10 Minuten mit Crontab ausführen), um das zu lesen und httpd/error_logbei der letzten Nachricht preg_match sending a SIGTERMApache automatisch neu zu starten?

Antwort1

Das Parsen der Protokolldateien kann ziemlich knifflig sein. Anstatt dies zu versuchen, wäre es wahrscheinlich besser, ein Skript wie dieses zu verwenden, das von einem Crontab-Eintrag aus ausgeführt werden kann. Dieses Skript versucht, auf den Server zuzugreifen. Wenn dies nicht gelingt, wird Apache neu gestartet.

Skript

Quelle des Skripts:Bash-Skript zum automatischen Neustarten von Apache

#!/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

Pfade

Die Pfade zu den Stopp-/Startskripten müssen entsprechend angepasst werden, je nachdem, wo Ihre Distribution Apache installiert hat. Zeilen wie diese:

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

Wenn Sie CentOS verwenden, sieht es folgendermaßen aus:

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

Name der ausführbaren Datei

Dasselbe gilt für die killlallZeilen. Der Name der ausführbaren Datei unter CentOS lautet httpd.

Der Crontab-Eintrag

Dieser Cron muss als Root ausgeführt werden, damit er über die entsprechenden Berechtigungen zum Stoppen/Starten von Apache verfügt.

verwandte Informationen