इंटरनेट कनेक्शन ड्रॉप अलर्ट


9

5 मिनट के लिए कोई इंटरनेट कनेक्टिविटी नहीं होने पर अलर्ट (पीसी स्पीकर) बजाने वाला कौन सा सॉफ्टवेयर है?

मेरा स्विच / राउटर हर कुछ दिनों में डिस्कनेक्ट हो जाता है, और ऐसा होने पर मैं इसे रीसेट करना चाहता हूं।

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

3
स्पष्ट इंगित करने के लिए नहीं, लेकिन आप एक दोषपूर्ण स्विच / राउटर की समस्या के लिए एक बहुत गोल चक्कर समाधान ले रहे हैं
माइकल Mrozek

जवाबों:


7

आप इस स्क्रिप्ट के एक संशोधित संस्करण का उपयोग कर सकते हैं जो आप चाहते हैं:

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

हम "कनेक्टेड" उदाहरण हैं

डिबगिंग चालू होने से आप देख सकते हैं कि स्क्रिप्ट का क्या काम है।

set -x

"कनेक्शन ऊपर है" स्थिति प्रदर्शित करने के लिए एक मान्य होस्टनाम के साथ चल रहा है।

$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'

उपरोक्त चर के एक जोड़े को इनिशियलाइज़ करता है और आखिरी बार निर्धारित करता है कि हम लूप से गुजरे हैं $lastAccessTime। अब हम Google को पिंग करने का प्रयास करते हैं।

+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955

अब हम किसी भी डाउन टाइम की गणना करते हैं $downTime, अगर पिंग विफल हो जाता है, अन्यथा, हम $downTimeशून्य पर रीसेट करते हैं, और पुनर्गणना करते हैं $lastAccessTime

+ sleep 15

अब हम 15 सेकंड प्रतीक्षा करते हैं।

+ '[' 0 -ge 300 ']'

अब हम जाँचते हैं कि क्या हम नीचे> 5 मिनट (300 सेकंड) के लिए हैं। फिर हम whileलूप से गुजरना दोहराते हैं ।

+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....

जब तक हम ऊपर हैं, तब तक pingहर 15 सेकंड में कमांड के साथ जांच करने के अलावा कुछ नहीं होगा ।

हम "अस्वीकृत" उदाहरण हैं

अब एक "कनेक्शन बंद है" राज्य अनुकरण करने के लिए, हम होस्ट नाम हम पिंग रहे हैं बाहर स्वैप और एक नकली एक का उपयोग होगा, google1234567890.com। डिबगिंग के साथ हमारी स्क्रिप्ट के एक रन को दोहराने से अब हम कुछ वास्तविक डाउन टाइम की गणना करते हुए देखते हैं।

$ ./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
...

ऊपर दिया गया नोटिस $downTimeअब तक 15 सेकंड के बराबर है। यदि हम थोड़ी देर प्रतीक्षा करें तो हम इसे देखेंगे:

+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15

हमने 300 सेकंड डाउन टाइम अर्जित किया है। तो अब जब हम जाँच, हम, संदेश मुद्रित alert

+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15

यह राज्य तब तक जारी रहेगा जब तक कनेक्शन बहाल नहीं हो जाता और यह pingएक बार फिर सफल हो जाता है।

तो एक ध्वनि के बारे में क्या?

यह आसान है। आप ऐसा करने के लिए कई प्रकार के उपकरणों का उपयोग कर सकते हैं। मैं कुछ का उपयोग करता हूं soxया mplayerएक ऑडियो फ़ाइल खेलने के लिए जैसे कि .mp3या .wavएक उचित ध्वनि के साथ फ़ाइल जिसे आप हर 15 सेकंड में सुनना चाहते हैं, जबकि कनेक्शन नीचे है।

mplayer someaudio.wav

बस alertइस पंक्ति के साथ ऊपर दिए गए संदेश को ऑडियो प्रतिक्रिया प्राप्त करने के लिए बदलें कि कनेक्शन नीचे है।

पिंग के साथ मुद्दों को समय पर पूरा करना

यदि आप pingऊपर दिए गए तरीके से उपयोग करते हैं , तो आप एक धीमी अंतराल समय का सामना करेंगे, जहां pingकनेक्शन के डाउन होने पर विफल होने पर 10-20 सेकंड का समय लगता है। इस U & L Q & A शीर्षक से मेरा उत्तर देखें: किसी भी कमांड के आउटपुट को रीडायरेक्ट कैसे करें? fingइसके बजाय कमांड लाइन टूल का उपयोग करके एक उदाहरण के लिए । यह उपकरण पारंपरिक की तुलना में अधिक तेज़ी से विफल हो जाएगा ping


Btw मैं beepकमांड का उपयोग कर रहा हूं , क्या यह सुरक्षित है chown /dev/tty0इसलिए मैं इसके बिना उपयोग कर सकता हूं sudo?
कोकिज्जू

1
@ कोकिज्जु - नहीं, आपको स्वामित्व नहीं बदलना चाहिए /dev/tty0
स्लम

1
हुर्रे sox,! @Kokizzu - पर अनुमतियों को छोड़ने के बारे में SLM के अधिकार /dev/tty0अकेले डिवाइस, लेकिन आप एक मिल सकता है छद्म टर्मिनल /dev/pts/[num] चरित्र डिवाइस की ही तरह है कि - उपकरण xtermप्रत्येक विंडो, उदाहरण के लिए के लिए उपयोग करता है - की तरह कुछ के साथ screenया tmuxया यहाँ तक कि ssh। ये आप अधिक सुरक्षित रूप से नियंत्रित कर सकते हैं, क्योंकि वे केवल /dev/ptmxवैसे ही मास्टर डिवाइस के लिए गुलाम डिवाइस हैं और उसी तरह की समस्याओं का कारण नहीं बनेंगे, जैसे कि, एक उपयोगकर्ता के स्वामित्व वाली /bin/loginप्रक्रिया हो सकती है - जो कि दूसरे मामले में हो सकती है।
चाटुकार

aplay alert.wavयह एएएसए प्रणाली का हिस्सा होने के कारण ध्वनि को चलाने के लिए एक अधिक मानक तरीका है और सबसे अधिक विकृतियों में आता है।
रे फॉस

4

यदि आप लिनक्स का उपयोग कर रहे हैं तो आप google.comउदाहरण के लिए स्क्रिप्ट के भीतर पिंग का उपयोग कर सकते हैं :

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
यह काम करेगा, लेकिन आप fingइसके बजाय का उपयोग करने पर विचार कर सकते हैं pingpingCmd। सफल नहीं होने पर असफल होने में थोड़ा समय ले सकते हैं। fingOtherhand पर आदेश 1 सेकंड के भीतर असफल हो जायेगी। इस क्यू एंड ए के लिए मेरा एक और देखें: किसी भी कमांड के आउटपुट को रीडायरेक्ट कैसे करें? । मैं दोनों का उपयोग कर दिखाने के pingऔर fing
स्लम

@ एसएलएम, आपके संपादन के लिए धन्यवाद, मैं उलझन में था कि पिंग को केवल एक सेकंड के लिए कैसे बनाया जाए
निदाल

ऐसा लगता है कि यह प्रति सेकंड एक असीमित संख्या में पिंग निष्पादित करेगा यदि यह तुरंत प्रतिक्रिया करता है, जैसे कि जब ईथरनेट बिजली खो देता है। sleep 1इसे रोकने के लिए पर्याप्त है।
रे फॉस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.