it-swarm.com.de

Bash-Skript zum Erkennen, wenn mein Server ausgefallen oder offline ist

Hintergrund: Ich muss eine Benachrichtigung erhalten, wenn mein Server ausfällt. Wenn der Server ausfällt, kann der Sysload-Kollektor möglicherweise keine Warnung senden. Um eine Warnung zu erhalten, wenn der Server ausfällt, habe ich eine externe Quelle (Server), um sie zu erkennen.

Frage: Gibt es eine Möglichkeit (ich bevorzuge Bash-Skript) zu erkennen, wenn mein Server ausgefallen oder offline ist und eine Warnmeldung (E-Mail + SMS) sendet?

18

Wenn Sie einen separaten Server haben, auf dem Sie Ihr Überprüfungsskript ausführen können, führt ein solcher Vorgang einen einfachen Ping-Test durch, um festzustellen, ob der Server aktiv ist:

#!/bin/bash
SERVERIP=192.168.2.3
[email protected]

ping -c 3 $SERVERIP > /dev/null 2>&1
if [ $? -ne 0 ]
then
   # Use your favorite mailer here:
   mailx -s "Server $SERVERIP is down" -t "$NOTIFYEMAIL" < /dev/null 
fi

Sie können das Skript so einstellen, dass es regelmäßig ausgeführt wird.

Wenn Sie kein Mailx haben, müssen Sie diese Zeile durch ein beliebiges Befehlszeilen-E-Mail-Programm ersetzen und wahrscheinlich die Optionen ändern. Wenn Ihr Mobilfunkanbieter eine E-Mail-Adresse SMS) angibt, können Sie die E-Mail an diese Adresse senden. Wenn Sie beispielsweise mit AT & T eine E-Mail an die Telefonnummer senden @ txt.att.net, es wird die E-Mail an Ihr Telefon senden.

Hier ist eine Liste von E-Mails an SMS Gateways:

http://en.wikipedia.org/wiki/List_of_SMS_gateways

Wenn Ihr Server ein öffentlich zugänglicher Webserver ist, gibt es einige kostenlose Dienste, mit denen Sie Ihre Website überwachen und Sie benachrichtigen können, wenn er nicht verfügbar ist. Suchen Sie im Internet nach kostenloser Website-Überwachung um welche zu finden.

24
Johnny

Ping ist eine Option, aber in vielen Fällen kann ein Computer eine Ping-Antwort senden, während der eigentliche Server, um den es geht, ausfällt. Es ist besser, einen End-to-End-Test durchzuführen. Im folgenden Beispiel wird eine Seite vom Webserver angefordert.

Wenn es sich um einen Webserver handelt, sieht er ungefähr so ​​aus:

#!/bin/bash
wget -qO /dev/null 'http://webserver/some_existing_short_document.html' || {
    echo "Webserver down"
    # another mailer example
    sendemail -s mailserverip -f '[email protected]' -t '[email protected]' -u 'Webserver down' -m 'The webserver is down'
}

Wenn Sie das HTML-Dokument in ein PHP-Dokument ändern und De-PHP-Skript-Tests wie die Datenbankverbindung, Dateisysteme usw. durchführen, können Sie sogar weitere Aspekte des Servers testen. Auf diese Weise können Sie die proaktive Überwachung des Computers starten (siehe Probleme, bevor der Server abstürzt).

Ähnlich wie beim Überprüfen eines Mailservers, aber anstatt eine Webseite anzufordern, senden Sie einfach eine E-Mail über den Mailserver und prüfen, ob Sie sie in Ihrer Mailbox erhalten

9
jippie

Hier ist, wie ich das gleiche Problem gelöst habe

#!/bin/bash
NOTIFYEMAIL=<your email>
SMSEMAIL=<cell phone number @ sms-gateway>
[email protected]
SERVER=http://127.0.0.1/
PAUSE=60
FAILED=0
DEBUG=0

while true 
do
/usr/bin/curl -sSf $SERVER > /dev/null 2>&1
CS=$?
# For debugging purposes
if [ $DEBUG -eq 1 ]
then
    echo "STATUS = $CS"
    echo "FAILED = $FAILED"
    if [ $CS -ne 0 ]
    then
        echo "$SERVER is down"

    Elif [ $CS -eq 0 ]
    then
        echo "$SERVER is up"
    fi
fi

# If the server is down and no alert is sent - alert
if [ $CS -ne 0 ] && [ $FAILED -eq 0 ]
then
    FAILED=1
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER failed"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$SMSEMAIL" 
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$NOTIFYEMAIL" 
    fi

# If the server is back up and no alert is sent - alert
Elif [ $CS -eq 0 ] && [ $FAILED -eq 1 ]
then
    FAILED=0
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER is back up"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$SMSEMAIL"
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$NOTIFYEMAIL"
    fi
fi
sleep $PAUSE
done
5
user54782

Ich würde die Verwendung von Nagios sehr empfehlen. Es handelt sich um eine Infrastruktur zur Überwachung und Alarmierung aller gewünschten Dienste (viele Plugins sind verfügbar und Sie können Ihre eigenen schreiben). Es kann natürlich einfache Pings durchführen, um die Verfügbarkeit von Servern zu überprüfen, aber wie andere darauf hingewiesen haben, ist es besser, stattdessen die Verfügbarkeit von Diensten (z. B. Web, E-Mail usw.) zu überprüfen (was Nagios leicht tun können).

1
emerino