İstediğinizi yapmak için bu komut dosyasının değiştirilmiş bir sürümünü kullanabilirsiniz:
#!/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
Biz "CONNECTED" Örnekiyiz
Hata ayıklama açıkken komut dosyasının ne yaptığını görebilirsiniz.
set -x
"Bağlantı açık" durumunu göstermek için geçerli bir ana bilgisayar adıyla çalıştırma.
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'
Yukarıdaki birkaç değişken başlatır ve döngüden en son ne zaman geçtiğimizi belirler $lastAccessTime. Şimdi Google'a ping atmaya çalışıyoruz.
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
Şimdi herhangi bir kesinti süresi hesaplıyoruz $downTime, ping başarısız olursa, $downTimesıfıra sıfırlar ve yeniden hesaplarız $lastAccessTime.
+ sleep 15
Şimdi 15 saniye bekliyoruz.
+ '[' 0 -ge 300 ']'
Şimdi 5 dakikadan fazla (300 saniye) çalışıp çalışmadığımızı kontrol ediyoruz. Sonra whiledöngüden geçerek tekrar ediyoruz .
+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....
Çalıştığımız sürece, pingher 15 saniyede bir komutla kontrol etmekten başka bir şey olmayacak .
Biz "BAĞLI DEĞİLİZ" Örnekiz
Şimdi "bağlantı kapalı" durumunu simüle etmek için pinglediğimiz ana bilgisayar adını değiştireceğiz ve sahte bir tane kullanacağız google1234567890.com. Hata ayıklama etkin durumdayken komut dosyamızın bir tekrarını tekrarlamak artık gerçek bir kesinti süresi hesaplanıyor.
$ ./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
...
Yukarıda belirtilen not, $downTimeşimdiye kadar 15 saniyeye eşittir. Biraz daha beklersek şunu göreceğiz:
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15
300 saniyelik kapalı kalma süresi elde ettik. Şimdi kontrol ettiğimizde mesajı yazdırıyoruz alert.
+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15
Bu durum, bağlantı yeniden sağlanana ve pingbir kez daha başarılı olana kadar devam eder .
Peki ya bir ses?
Bu kolay. Bunu yapmak için çeşitli araçlar kullanabilirsiniz. Bağlantı kesilmişken, her 15 saniyede bir duymak istediğiniz uygun sese sahip bir dosya veya dosya gibi bir ses dosyasını çalmak için soxveya mplayerböyle bir şey kullanırdım ..mp3.wav
mplayer someaudio.wav
Basitçe yerine alertbağlantı aşağı olduğunu ses geri bildirim almak için bu hat ile yukarıdaki mesajı.
Ping ile ilgili sorunları zaman aşımı
Eğer kullanırsanız pingşekilde muhtemelen onu alır yavaş gecikme süresini karşılaşacağınız yukarıdaki pingbağlantı aşağı olduğunda başarısız olmasına yönelik anlamıyla 10-20 saniye. Bu U&L Soru ve Cevap kısmına verilen cevabım bakın: Herhangi bir komutun çıktısını nasıl yeniden yönlendirebilirim? fingbunun yerine komut satırı aracını kullanarak bir örnek . Bu araç geleneksel olandan daha hızlı başarısız olacaktır ping.