İnternet bağlantısı düşme uyarısı


9

5 dakika boyunca internet bağlantısı olmadığında bir uyarı (PC hoparlörü) çalacak hangi yazılım var?

Anahtarımın / yönlendiricimin birkaç günde bir bağlantısı kesilmiş görünüyor ve gerçekleştiğinde sıfırlamak istiyorum.

PC          -- TP-Link switch/router -- FO
192.168.x.1 -- 192.168.x.2 / x.y.z.a -- a.b.c.d

3
Açıkça belirtmek değil, ancak hatalı bir anahtar / yönlendirici sorununa çok dolambaçlı bir çözüm alıyorsunuz
Michael Mrozek

Yanıtlar:


7

İ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.


Btw beepkomutunu chown /dev/tty0kullanıyorum, onsuz kullanabilmem güvenli sudomi?
Kokizzu

1
@Kokizzu - hayır sahipliğini değiştirmemelisin /dev/tty0.
slm

1
Yaşasın sox! @Kokizzu - izinlerini bırakma konusunda slm hakkı /dev/tty0yalnız cihazın, ancak bir alabilir uçbirimsi /dev/pts/[num] karakter cihazının aynı tür olduğunu - Cihazı xtermörneğin, her pencere için kullanımları - böyle bir şeyle screenveya tmuxhatta ya ssh. Bunlar, daha sonra, yalnızca ana /dev/ptmxcihaza bağımlı cihazlar oldukları ve örneğin, kullanıcının sahip olduğu bir /bin/loginişlemle aynı tür sorunlara neden olmayacağı için daha güvenli bir şekilde kontrol edebilirsiniz - diğer durumda ne olabilir.
mikeserv

aplay alert.wavALSA sisteminin bir parçası olduğu ve çoğu dağıtımda önceden dağıtıldığı için ses çalmanın daha standart bir yoludur.
Ray Foss

4

Linux kullanıyorsanız bir komut dosyasında ping komutunu kullanabilirsiniz google.com, örneğin:

counter=0
while [ true ]
do
ping -c 1 google.com > /dev/null 2>&1
if [ $? -ne 0 ] 
then
    let "counter +=1"
else
    let "counter = 0"
fi
if [ $counter -eq 300 ] # we assume that one ping need one second (300 is 5 minutes)
then
   echo "alert"
fi
done

3
Bu işe yarayacaktır, ancak fingbunun yerine kullanmayı düşünebilirsiniz ping. pingCmd. başarılı olmadığında başarısız olmak biraz zaman alabilir. Diğer yandan fingkomut 1 saniye içinde başarısız olur. Daha fazla bilgi için bu Soru ve Cevaplarıma bakın: Herhangi bir komutun çıktısını nasıl yeniden yönlendirirsiniz? . Ben ikisini de kullanarak göstermek pingve fing.
slm

@slm, Düzenlediğiniz için teşekkürler, ping'i sadece bir saniye sürecek şekilde kafam karıştı
Nidal

Bu, anında yanıt verirse, örneğin ethernet'in güç kaybettiği gibi, saniyede sınırsız sayıda ping gerçekleştirecek gibi görünüyor. sleep 1bunu önlemek için yeterlidir.
Ray Foss
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.