İ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, $downTime
sı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 while
dö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, ping
her 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 ping
bir 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 sox
veya mplayer
böyle bir şey kullanırdım ..mp3
.wav
mplayer someaudio.wav
Basitçe yerine alert
bağ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 ping
bağ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? fing
bunun yerine komut satırı aracını kullanarak bir örnek . Bu araç geleneksel olandan daha hızlı başarısız olacaktır ping
.