2010-05-27 5 views
10

मुझे एक क्रोनबॉज डालने के लिए एक बैश (या एक सादा खोल) स्क्रिप्ट चाहिए जो हर मिनट जांचता है कि इंटरनेट चालू है या नहीं।बैश स्क्रिप्ट (अधिक या कम) विश्वसनीय रूप से जांचें कि क्या इंटरनेट

#! /bin/sh 

host1=google.com 
host2=wikipedia.org 
curr_date=`date +"%Y%m%d%H%M"` 

echo -n "${curr_date};" 
((ping -w5 -c3 $host1 || ping -w5 -c3 $host2) > /dev/null 2>&1) && 
echo "up" || (echo "down" && exit 1) 

आप कैसे करते हैं:

इस तरह मैंने किया है? आप कौन से मेजबान पिंग करेंगे?

स्पष्टीकरण:

  • द्वारा "इंटरनेट अप है", मैं मेरी इंटरनेट कनेक्शन मतलब है।

  • द्वारा "अप", मैं प्रयोग करने योग्य कनेक्शन होना मतलब (वास्तव में कोई फर्क नहीं पड़ता अगर हम डीएनएस के बंद होने या कनेक्शन [टाइमआउट के लिए मन -w] वास्तव में बहुत धीमी है के बारे में बात कर रहे हैं)। यही कारण है कि मैंने किसी भी आईपी को शामिल नहीं किया बल्कि मेजबान भी शामिल किया।

क्या मुझे स्टैक ओवरफ़्लो भी पिंग करना चाहिए? मेरा मतलब है, अगर मैं Google, विकिपीडिया या स्टैक ओवरफ़्लो तक नहीं पहुंच पा रहा हूं, तो मुझे इंटरनेट नहीं चाहिए: पी

+0

गूगल जो मैं हमेशा परीक्षण करने के लिए उपयोग करें यदि मेरी कनेक्शन मिल गया है है। –

+0

8.8.8.8 अच्छी तरह से अच्छा होगा, खासकर जब से यह मल्टीकास्ट है। –

+6

पूरी तरह से इंटरनेट आम तौर पर "ऊपर" होता है। हालांकि, इसके साथ आपका कनेक्शन नहीं हो सकता है! ;-) –

उत्तर

5

वह एक अच्छा समाधान जैसा प्रतीत होता है। बस कुछ और मेजबान जोड़ें, और शायद कुछ शुद्ध आईपी होस्ट्स ताकि आप DNS फ़ंक्शनिंग पर भरोसा न करें (जो स्वयं "अप" की परिभाषा पर निर्भर करता है)।

+1

असल में DNS फ़ंक्शनिंग के आधार पर एक अच्छी बात हो सकती है। यदि आप वास्तविक जांचना चाहते हैं "मैं सामान्य की तरह वेब ब्राउज़ कर सकता हूं", तो DNS समर्थन की आवश्यकता एक अच्छी बात है (टीएम)। –

1

आप किस इंटरनेट कनेक्टिविटी की जांच कर रहे हैं? डीएचसीपी? डीएनएस? शारीरिक रूप से जैक में प्लग किया जा रहा है? कर्नेल एनआईसी की उपस्थिति को पहचानता है?

host(1) कमांड का उपयोग करके आप मैन्युअल रूप से अपने आईएसपी के DNS सर्वर से पूछ सकते हैं। आम तौर पर यह एक अच्छा संकेत है कि आपके राउटर ने आईएसपी से अपना कनेक्शन खो दिया है या नहीं।

आप पूछ सकते हैं कि आपके कर्नेल में netstat(8) या ifconfig(8) का उपयोग करके इंटरफेस क्या है।

आप ifstat का उपयोग कर इंटरफ़ेस के बारे में विस्तृत आंकड़े प्राप्त कर सकते हैं।

4

धन्यवाद अपने कोड के लिए, यह बहुत अच्छा काम करता है, मैं केवल एक पंक्ति वास्तव में छोड़ दिया है:

((ping -w5 -c3 8.8.8.8 || ping -w5 -c3 4.2.2.1) > /dev/null 2>&1) && echo "up" || (echo "down" && exit 1) 
संबंधित मुद्दे