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

437
Ash

Ich möchte prüfen, ob ein Server mit dem Internet verbunden ist oder nicht. Ich habe folgendes Skript erfolglos ausprobiert, das alle 5 Minuten ausgeführt wird und eine E-Mail prüft, ob es mit dem Internet verbunden ist.

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

Das Problem ist jedoch, dass ich kontinuierlich alle 5 Minuten E-Mails bekomme, sobald die Verbindung hergestellt ist. Wie kann ich das beheben?

2
Welche Art von Benachrichtigung möchten Sie? AFH vor 5 Jahren 0
Vorzugsweise E-Mail Ash vor 5 Jahren 0
Aber das tust du! Wie soll es anders funktionieren? AFH vor 5 Jahren 0

2 Antworten auf die Frage

2
xenoid

Weil Sie nicht über einen Status, sondern über eine Statusänderung informiert werden möchten. Man muss sich also irgendwo an den vorherigen Status erinnern, etwa:

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

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

if [$? -eq 0] 

Oder dieses

if [$? -e 0] 

ist nur ein Tippfehler?

Entschuldigung, es ist ein Tippfehler Ash vor 5 Jahren 0