मेरे सर्वर के डाउन या ऑफलाइन होने पर पता लगाने के लिए स्क्रिप्ट को बैश करें


17

पृष्ठभूमि: जब मेरा सर्वर डाउन होता है तो मुझे अलर्ट प्राप्त करने की आवश्यकता होती है। जब सर्वर डाउन होता है, तो शायद Sysload कलेक्टर कोई अलर्ट नहीं भेज पाएगा। सर्वर डाउन होने पर अलर्ट प्राप्त करने के लिए, मेरे पास इसका पता लगाने के लिए एक बाहरी स्रोत (सर्वर) है।

प्रश्न: क्या मेरा सर्वर डाउन या ऑफलाइन होने पर पता लगाने का कोई तरीका है (मैं बैश स्क्रिप्ट पसंद करता हूं) और अलर्ट मैसेज (ईमेल + एसएमएस) भेजता है?

जवाबों:


24

यदि आपके पास अपनी चेक स्क्रिप्ट को चलाने के लिए एक अलग सर्वर है, तो कुछ इस तरह से सरल पिंग परीक्षण करेगा कि क्या सर्वर जीवित है या नहीं:

#!/bin/bash
SERVERIP=192.168.2.3
NOTIFYEMAIL=test@example.com

ping -c 3 $SERVERIP > /dev/null 2>&1
if [ $? -ne 0 ]
then
   # Use your favorite mailer here:
   mailx -s "Server $SERVERIP is down" -t "$NOTIFYEMAIL" < /dev/null 
fi

आप समय-समय पर चलाने के लिए स्क्रिप्ट को क्रोन कर सकते हैं।

यदि आपके पास mailx नहीं है, तो आपको जो भी कमांड लाइन ईमेल प्रोग्राम है, उस लाइन को बदलना होगा और शायद विकल्पों को बदलना होगा। यदि आपका कैरियर एक एसएमएस ईमेल पता प्रदान करता है, तो आप उस पते पर ईमेल भेज सकते हैं। उदाहरण के लिए, एटी एंड टी के साथ, यदि आप phonenumber @ txt.att.net को ईमेल भेजते हैं, तो यह आपके फोन पर ईमेल भेजेगा।

यहां एसएमएस गेटवे पर ईमेल की सूची दी गई है:

http://en.wikipedia.org/wiki/List_of_SMS_gateways

यदि आपका सर्वर सार्वजनिक रूप से सुलभ वेबसर्वर है, तो आपकी वेबसाइट पर नज़र रखने के लिए कुछ नि: शुल्क सेवाएं हैं और यदि यह नीचे है तो आपको सचेत करने के लिए, कुछ खोजने के लिए मुफ्त वेबसाइट की निगरानी के लिए वेब पर खोजें।


क्या आप एसएमएस अलर्ट संदेश के बारे में विस्तार से बता सकते हैं?
एमडी महबूबुर रहमान

4
सर्वर को पिंग करने के बजाय, आपको यह परीक्षण करना चाहिए कि यह क्या है जो आप सर्वर के बारे में परवाह करते हैं। उदाहरण के लिए, यदि यह एक मेल सर्वर है, तो यह अधिक महत्वपूर्ण है कि यह सफलतापूर्वक मेल भेजता है और प्राप्त करता है।
जिम पेरिस

मैं अपने उत्तर में आवेदन का पता लगाने से दूर रहा क्योंकि प्रश्न में यह निर्दिष्ट नहीं किया गया था कि सर्वर पर कौन सी सेवाएँ चल रही हैं - उन्होंने सर्वर अप / डाउन डिटेक्शन के लिए कहा। ऐसी सैकड़ों सामान्य सेवाएं हैं, जिनका पता लगाया जा सकता है और असीमित संख्या में कस्टम अनुप्रयोग हो सकते हैं। ऐसा लगता है कि उसके पास एक स्थानीय सेवा मॉनिटर (sysload) है जो सेवाओं की निगरानी कर रहा है।
जॉनी

पिंग मेरे लिए सब बेकार है। मेरे पास एक सर्वर डाउन है फिर भी मुझे 3 में से 3 पैकेट वापस मिल गए हैं और 0. का फाइनल रिटर्न वैल्यू कैसे आया? स्थानीय मशीन "गंतव्य होस्ट अप्राप्य" पैकेट लौटा रही है।
एलिस्टेयर जी

@AlastairG - यह एक सवाल के रूप में बेहतर होगा, इसका जवाब देने के लिए एक टिप्पणी में पर्याप्त जगह नहीं है। लेकिन पहले साइट को देखें कि क्या किसी ने इसी तरह का प्रश्न पूछा है, तो आपको अपना उत्तर मिल सकता है।
जॉनी

9

पिंगिंग एक विकल्प है, लेकिन कई अवसरों पर एक मशीन पिंग उत्तर भेजने में सक्षम होगी, जबकि वास्तविक सर्वर कि यह सब नीचे है। एंड-टू-एंड टेस्ट करना बेहतर है। नीचे दिए गए उदाहरण में वेबसर्वर से एक पेज मांगा गया है।

यदि यह एक वेबसर्वर है, तो यह कुछ इस तरह दिखाई देगा:

#!/bin/bash
wget -qO /dev/null 'http://webserver/some_existing_short_document.html' || {
    echo "Webserver down"
    # another mailer example
    sendemail -s mailserverip -f 'from@localhost' -t 'user@localhost' -u 'Webserver down' -m 'The webserver is down'
}

यदि आप html डॉक्यूमेंट को php डॉक्यूमेंट में बदलते हैं, और डेटाबेस कनेक्शन, फाइलसिस्टम इत्यादि जैसी डी php स्क्रिप्ट टेस्ट चीजें बनाते हैं, तो आप सर्वर के और पहलुओं का भी परीक्षण कर सकते हैं। इस तरह आप मशीन की सक्रिय निगरानी शुरू कर सकते हैं (सर्वर क्रैश होने से पहले समस्याओं को देखें)।

मेलस्वर की जाँच करने के साथ भी ऐसा ही है, लेकिन आप वेब पेज के लिए अनुरोध करने के बजाय, आप केवल मेल से एक ईमेल भेजते हैं और देखते हैं कि क्या आप इसे अपने मेलबॉक्स में प्राप्त करते हैं


अगर आपको रूट ईमेल आपके इनबॉक्स में भेज दिया गया है, तो आपको न तो ईमेल भेजना है अगर आप इस स्क्रिप्ट को
क्रॉस्टैब

5

यहां मैंने उसी समस्या को हल किया है

#!/bin/bash
NOTIFYEMAIL=<your email>
SMSEMAIL=<cell phone number @ sms-gateway>
SENDEREMAIL=alert@localhost
SERVER=http://127.0.0.1/
PAUSE=60
FAILED=0
DEBUG=0

while true 
do
/usr/bin/curl -sSf $SERVER > /dev/null 2>&1
CS=$?
# For debugging purposes
if [ $DEBUG -eq 1 ]
then
    echo "STATUS = $CS"
    echo "FAILED = $FAILED"
    if [ $CS -ne 0 ]
    then
        echo "$SERVER is down"

    elif [ $CS -eq 0 ]
    then
        echo "$SERVER is up"
    fi
fi

# If the server is down and no alert is sent - alert
if [ $CS -ne 0 ] && [ $FAILED -eq 0 ]
then
    FAILED=1
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER failed"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$SMSEMAIL" 
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$NOTIFYEMAIL" 
    fi

# If the server is back up and no alert is sent - alert
elif [ $CS -eq 0 ] && [ $FAILED -eq 1 ]
then
    FAILED=0
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER is back up"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$SMSEMAIL"
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$NOTIFYEMAIL"
    fi
fi
sleep $PAUSE
done

मुझे अपने मैक पर चलने के लिए अनुकूल होना था /usr/bin/mail -s "$SERVER went down" "$SENDEREMAIL" "$SMSEMAIL"
मिकीएलएल

यह समाधान निश्चित रूप से BUT काम करता है। (1) यदि आप इसे स्थानीय मशीन पर कॉल कर रहे हैं तो मुझे लगता है कि यह आपको बताएगा कि अपाचे की मृत्यु हो गई, हालांकि मैं इसे इस तरह से नहीं करूंगा। (2) यदि आप स्थानीय मशीन पर इसका उपयोग करते हैं और नेटवर्क इस बॉक्स के बीच में है या यह कुछ है और यह एज सर्वर या कुछ है, तो आपको ईमेल नहीं मिलेगा और यह नहीं पता चलेगा कि कोई समस्या है। (३) यदि आप किसी अन्य मशीन पर इसका उपयोग करते हैं, तो आपका कर्ल कमांड निर्दिष्ट होने तक समय-समय पर एक लंबा समय लेगा, इसलिए यदि आप म्युलिपल मेजबानों को देख रहे थे, तो यह एक पड़ाव में पीस जाएगा ..
माइक क्यू

1

मैं नगियोस का उपयोग करने की अत्यधिक सलाह दूंगा , यह आपके द्वारा वांछित किसी भी सेवा की निगरानी और सतर्कता के लिए बुनियादी ढांचा है (कई प्लगइन्स उपलब्ध हैं और आप स्वयं लिख सकते हैं)। यह निश्चित रूप से सर्वर उपलब्धता पर जाँच करने के लिए सरल पिंग कर सकता है, लेकिन जैसा कि अन्य ने बताया है, सेवाओं की उपलब्धता (जैसे वेब, ईमेल, आदि) के लिए जाँच करना बेहतर है (बजाय नगिओस आसानी से कर सकते हैं)।


यह एक अच्छा उत्पाद है, मुझे सुरक्षा चिंताओं के बारे में आश्चर्य है
माइक क्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.