Shell-Skript erhält E-Mail-Benachrichtigung, wenn der Server mit dem Internet verbunden ist

Shell-Skript erhält E-Mail-Benachrichtigung, wenn der Server mit dem Internet verbunden ist

Ich möchte prüfen, ob ein Server eine Verbindung zum Internet hat oder nicht. Ich habe erfolglos versucht, das folgende Skript auszuführen, das alle 5 Minuten ausgeführt wird, prüft und eine E-Mail sendet, wenn eine Verbindung zum Internet besteht.

 ping -c 3 192.168.0.25 > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
      mailx -s "Server is Up" -t "[email protected]" < /dev/null   
  fi

Das Problem besteht jedoch darin, dass ich alle 5 Minuten eine E-Mail erhalte, sobald die Verbindung hergestellt ist. Wie kann ich das beheben?

Antwort1

Weil man nicht über einen Status, sondern über eine Statusänderung benachrichtigt werden möchte. Man muss sich also irgendwo merken, was der vorherige Status war, etwa so:

#! /bin/bash

statusFile=/var/tmp/connected # used to remember status
pingedHost=8.8.8.8
checkPeriod=5 # seconds

while true
do
    echo "Sleeping..."
    sleep $checkPeriod
    echo "Checking..."
    ping -c 1 $pingedHost > /dev/null 2>&1
    if [[ $? -eq 0 ]]
    then
        echo "Ping OK..."
        if [[ ! -f $statusFile ]] # not connected already
        then
            echo "Reconnected..."
            # send reconnection mail here
            touch $statusFile # remember state
        fi
    else
        echo "Ping KO..."
        if [[ -f $statusFile ]] # was connected before
        then
            echo "Disconnected..."
            # send disconnection mail here
            rm $statusFile # remember state
        fi
    fi
done

Antwort2

Es könnte besser sein, zu prüfen, ob das Ergebnis Null ist, anstatt ein -e, oder?

if [$? -eq 0]  

Oder dieses

if [$? -e 0]  

ist nur ein Tippfehler?

verwandte Informationen