Sie können eine geänderte Version dieses Skripts verwenden, um das zu tun, was Sie möchten:
#!/bin/bash
downTime=0
lastAccessTime=$(date +"%s")
while [ true ]; do
if ! ping -c1 google.com >& /dev/null; then
downTime=$(( $(date +"%s") - $lastAccessTime ))
else
downTime=0
lastAccessTime=$(date +"%s")
fi
sleep 15
if [ $downTime -ge 300 ]; then
echo "alert"
fi
done
Wir sind "VERBUNDEN" Beispiel
Wenn das Debuggen aktiviert ist, können Sie sehen, was das Skript tut.
set -x
Wird mit einem gültigen Hostnamen ausgeführt, um den Status "Verbindung ist aktiv" zu demonstrieren.
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'
Das Obige initialisiert einige Variablen und bestimmt, wann wir das letzte Mal die Schleife durchlaufen haben $lastAccessTime
. Wir versuchen jetzt, Google zu pingen.
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
Wir berechnen jetzt jede Ausfallzeit $downTime
. Wenn der Ping fehlschlägt, setzen wir ihn $downTime
auf Null zurück und berechnen ihn neu $lastAccessTime
.
+ sleep 15
Jetzt warten wir 15 Sekunden.
+ '[' 0 -ge 300 ']'
Jetzt prüfen wir, ob wir länger als 5 Minuten (300 Sekunden) unten waren. Dann wiederholen wir das Durchlaufen der while
Schleife.
+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....
Solange wir auf sind, passiert nichts anderes, als dass wir ping
alle 15 Sekunden mit dem Befehl nachsehen.
Wir sind "DISCONNECTED" Beispiel
Um nun zu simulieren, dass die Verbindung unterbrochen ist, tauschen wir den Hostnamen, den wir pingen, aus und verwenden einen gefälschten google1234567890.com
. Wenn wir einen Lauf unseres Skripts mit aktiviertem Debugging wiederholen, wird nun eine tatsächliche Ausfallzeit berechnet.
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402277506
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=0
+ sleep 15
+ '[' 0 -ge 300 ']'
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=15
+ sleep 15
...
Beachten Sie, dass $downTime
dies bisher 15 Sekunden entspricht. Wenn wir länger warten, sehen wir Folgendes:
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15
Wir haben 300 Sekunden Ausfallzeit. Wenn wir dies überprüfen, drucken wir die Nachricht aus alert
.
+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15
Dieser Status wird fortgesetzt, bis die Verbindung wiederhergestellt ist und die Verbindung ping
erneut erfolgreich ist.
Was ist also mit einem Sound?
Das ist einfach. Sie können dazu eine Vielzahl von Tools verwenden. Ich würde so etwas wie sox
oder verwenden mplayer
, um eine Audiodatei wie eine .mp3
oder eine .wav
Datei mit einem geeigneten Ton abzuspielen, den Sie alle 15 Sekunden hören möchten, während die Verbindung unterbrochen ist.
mplayer someaudio.wav
Ersetzen Sie einfach die alert
obige Meldung durch diese Zeile, um Audio-Feedback zu erhalten, dass die Verbindung unterbrochen ist.
Zeitüberschreitung bei Problemen mit Ping
Wenn Sie ping
die oben beschriebene Methode verwenden, tritt wahrscheinlich eine langsame Verzögerungszeit auf, bei der es ping
buchstäblich 10 bis 20 Sekunden dauert , bis sie fehlschlägt, wenn die Verbindung unterbrochen wird. Siehe meine Antwort auf diese U & L-Fragen und Antworten mit dem Titel: Wie leite ich die Ausgabe eines Befehls um? Beispiel: Verwenden Sie fing
stattdessen das Befehlszeilenprogramm . Dieses Tool schlägt schneller fehl als das herkömmliche ping
.