आप इस स्क्रिप्ट के एक संशोधित संस्करण का उपयोग कर सकते हैं जो आप चाहते हैं:
#!/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।