यदि कोई वेब साइट उपलब्ध है, तो स्क्रिप्ट स्वचालित रूप से परीक्षण करने के लिए


18

मैं अपने स्वयं के Centos VPS के साथ एक अकेला वेब डेवलपर हूं जो अपने ग्राहकों के लिए कुछ छोटी वेब साइटों की मेजबानी कर रहा है। आज मुझे पता चला कि मेरी httpd सेवा बंद हो गई थी (बिना किसी स्पष्ट कारण के - लेकिन वह एक और धागा है)। मैंने इसे पुनः आरंभ किया, लेकिन अब मुझे एक ऐसा तरीका खोजने की आवश्यकता है, जिससे मुझे ईमेल और / या एसएमएस द्वारा सूचित किया जा सके यदि यह फिर से होता है - मुझे यह पसंद नहीं है जब मेरा क्लाइंट मुझे बताए कि उनकी वेब साइट काम नहीं करती है!

मुझे पता है कि सर्वर मॉनिटरिंग सॉफ्टवेयर सहित कई अलग-अलग संभावनाएं हैं। मुझे लगता है कि मुझे वास्तव में एक स्क्रिप्ट की आवश्यकता है जिसे मैं अपने देव होस्ट (जो मेरे कार्यालय में स्थायी रूप से चल रहा है) से एक क्रॉन जॉब के रूप में चला सकता है, जो मेरे उत्पादन सर्वर से एक पेज लोड करने का प्रयास करता है और अगर यह 30 के भीतर लोड नहीं होता है सेकंड के बाद यह मुझे एक ईमेल या एसएमएस भेजता है। मैं शेल स्क्रिप्टिंग में बहुत बकवास हूं, इसलिए यह सवाल है।

किसी भी सुझाव की सराहना की जाएगी।


3
क्या आपने नागियोस या पीएसडीआई में देखा है? उनके पास यह कार्यक्षमता है कि (खैर, पीएसटीआई में निर्मित एसएमएस है, जिसमें नागियोस के साथ थोड़ी-बहुत छेड़छाड़ की आवश्यकता है लेकिन यह संभव है)
स्मजेज

नहीं, मैं अब एक नज़र लेने जा रहा हूं, सलाह के लिए धन्यवाद।
Xoundboy

जवाबों:


13

खैर ... सबसे सरल स्क्रिप्ट, मैं लिखता हूँ:

/usr/bin/wget "www.example.com" --timeout 30 -O - 2>/dev/null | grep "Normal operation string" || echo "The site is down" | /usr/bin/mail -v -s "Site is down" your@e-mail.address

इसे क्रोन में जोड़ें:

* * * * * /usr/bin/wget "www.example.com" --timeout 30 -O - 2>/dev/null  | grep "Normal operation string" || echo "The site is down" | /usr/bin/mail -v -s "Site is down" your@e-mail.address

लेकिन यह बताने में बहुत आसान है कि अगर यह मौजूद है तो समस्या क्या है।

UPD: अब यह एक-लाइनर पृष्ठ ("सामान्य ऑपरेशन स्ट्रिंग") पर एक विशिष्ट स्ट्रिंग के लिए जाँच करता है, जो केवल सामान्य ऑपरेशन पर दिखाई देना चाहिए।

UPD2: ई-मेल में त्रुटि पृष्ठ भेजने का एक सरल तरीका:

/usr/bin/wget "www.example.com" --timeout 30 -O - 2>/dev/null | grep "Normal operation string" || /usr/bin/wget "www.example.com" --timeout 30 -O - 2>/dev/null | /usr/bin/mail -v -s "Site is down" your@e-mail.address

यह माइनस है कि प्रथम परीक्षण में विफलता के मामले में पृष्ठ को फिर से अनुरोध किया गया है। इस बार अनुरोध सफल हो सकता है और आपको त्रुटि नहीं दिखाई देगी। बेशक, आउटपुट को स्टोर करना और अनुलग्नक के रूप में भेजना संभव है, लेकिन यह स्क्रिप्ट को अधिक जटिल बना देगा।


दिलचस्प लग रहा है .... इसलिए यदि पृष्ठ 30 सेकंड के भीतर लोड नहीं होता है तो एक ईमेल सही भेजा जाता है? यदि पेज लोड होता है, लेकिन एक त्रुटि संदेश प्रदर्शित होता है - तो इसे किसी विशिष्ट आउटपुट के परीक्षण के लिए कैसे अनुकूलित किया जा सकता है?
Xoundboy

उत्तर अपडेट किया गया। लेकिन स्क्रिप्ट अभी भी आपको त्रुटि नहीं भेजती है।
HUB

- हाय, अद्यतन के लिए धन्यवाद - मैं अपनी मशीन पर काम करने के लिए इसे प्राप्त करने के लिए संघर्ष कर रहा हूं - मुझे नहीं लगता कि कमांड का मेल हिस्सा अपनी बात ठीक से कर रहा है - अब समस्या निवारण के लिए कोई समय नहीं मिला है लेकिन कोशिश करेंगे फिर से कल या asap।
Xoundboy

खैर ... मेल प्रोग्राम को मैन्युअल रूप से चलाने और आउटपुट की जांच करने का प्रयास करें। परिणामों के लिए "/ var / log / mail" भी देखें फ़ायरवॉल सेटिंग्स की जाँच करें (रिमोट पोर्ट 25 तक पहुंच की अनुमति दी जानी चाहिए)।
एचयूबी

8

इस स्क्रिप्ट पर एक नज़र डालें:

curlURL प्राप्त करने के लिए एक कमांड-लाइन उपयोगिता है। स्क्रिप्ट निकास कोड की जाँच करती है ($। एक शेल स्क्रिप्ट में सबसे हाल के कमांड के निकास कोड को संदर्भित करता है) और अगर यह 0 के अलावा और कुछ भी था, तो एक त्रुटि की रिपोर्ट करता है (0 का एक निकास कोड आमतौर पर सफलता को संदर्भित करता है)। जैसा कि एचयूबी के उत्तर में उल्लेख किया गया है, आप ||पहली बार विफल होने पर दूसरी कमांड को चलाने के लिए केवल कमांड-लाइन पर भी देख सकते हैं ।

एक बार जब आप स्थिति का पता लगा लेते हैं, तो आपको बस अपने आप को कुछ मेल भेजना होगा। यहां एक उदाहरण है जो mailशेल स्क्रिप्ट से मेल भेजने के लिए कमांड का उपयोग करता है , यह मानकर कि आपके द्वारा परीक्षण किए जा रहे बॉक्स में SMTP सेटअप है:

BTW: यदि आप शेल स्क्रिप्टिंग में अच्छे नहीं हैं, तो अपने आप को शेल स्क्रिप्ट में सीमित न करें। आप एक रूबी स्क्रिप्ट, एक php स्क्रिप्ट का उपयोग कर सकते हैं, किसी भी प्रकार की स्क्रिप्ट जो आपका सर्वर चला सकता है! बस #!/path/to/executableस्क्रिप्ट की शुरुआत में लाइन जोड़ें - उदाहरण के लिए:

#!/usr/bin/php


आपके इनपुट के लिए धन्यवाद - एक पल मिलते ही मैं इस समाधान की जाँच करने जा रहा हूँ। जल्द ही रिपोर्ट करेंगे।
Xoundboy

6

इस स्क्रिप्ट की जाँच करें । जब भी कुछ गलत होता है तो यह वेबसाइटों की सूची के खिलाफ जाँच करता है और ईमेल भेजता है (ईमेल की सूची) (http प्रतिक्रिया 200 से अलग)। स्क्रिप्ट एक "। टेंप फाइल" याद रखने के लिए बनाता है कि कौन सी वेबसाइट (वेबसाइटें) अंतिम जांच में विफल रहीं, इसलिए आपको कई ईमेल नहीं मिलेंगे। जब वेबसाइट फिर से काम कर रही हो तो .temp फ़ाइल हटा दी जाती है।

#!/bin/bash
# list of websites. each website in new line. leave an empty line in the end.
LISTFILE=/scripts/isOnline/websites.lst
# Send mail in case of failure to. leave an empty line in the end.
EMAILLISTFILE=/scripts/isOnline/emails.lst

# `Quiet` is true when in crontab; show output when it's run manually from shell.
# Set THIS_IS_CRON=1 in the beginning of your crontab -e.
# else you will get the output to your email every time
if [ -n "$THIS_IS_CRON" ]; then QUIET=true; else QUIET=false; fi

function test {
  response=$(curl --write-out %{http_code} --silent --output /dev/null $1)
  filename=$( echo $1 | cut -f1 -d"/" )
  if [ "$QUIET" = false ] ; then echo -n "$p "; fi

  if [ $response -eq 200 ] ; then
    # website working
    if [ "$QUIET" = false ] ; then
      echo -n "$response "; echo -e "\e[32m[ok]\e[0m"
    fi
    # remove .temp file if exist.
    if [ -f cache/$filename ]; then rm -f cache/$filename; fi
  else
    # website down
    if [ "$QUIET" = false ] ; then echo -n "$response "; echo -e "\e[31m[DOWN]\e[0m"; fi
    if [ ! -f cache/$filename ]; then
        while read e; do
            # using mailx command
            echo "$p WEBSITE DOWN" | mailx -s "$1 WEBSITE DOWN" $e
            # using mail command
            #mail -s "$p WEBSITE DOWN" "$EMAIL"
        done < $EMAILLISTFILE
        echo > cache/$filename
    fi
  fi
}

# main loop
while read p; do
  test $p
done < $LISTFILE

Crontab config ($ crontab -e) के लिए निम्न पंक्तियाँ जोड़ें

THIS_IS_CRON=1
*/30 * * * * /path/to/isOnline/checker.sh

गीथूब पर उपलब्ध है


2

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


यह भी दिलचस्प लग रहा है - मैं इसे जल्द ही जांचने के लिए समय खोजने की कोशिश करूँगा और पी [मेरे निष्कर्षों को वापस ले लूंगा।
Xoundboy

1

मैं इसके लिए ppuri की सलाह दूंगा। उनकी मुफ्त सेवा आपको 1 साइट की जांच करने की अनुमति देती है, लेकिन आपको केवल 1 सर्वर की जांच करने की आवश्यकता है। यदि आपके पास एक आईफोन है तो वे आपको मुफ्त में पुश-मैसेज करते हैं, इसलिए उनसे एसएमएस क्रेडिट खरीदने की कोई आवश्यकता नहीं है, और उनके पास कई सेटिंग्स हैं जिनका आप उपयोग कर सकते हैं। मेरा 2 सेट (10 मिनट) और उसके बाद हर 10 मिनट के बाद मुझे सूचित करने के लिए सेट किया गया है। यह बहुत बढ़िया है, क्योंकि यह HTTP 500 संदेशों के लिए भी जाँच करता है कि एक साइट का संकेत क्या है। यदि यह विफल हो जाता है, तो यह तुरंत आपकी साइट को एक अलग स्थान पर एक अलग सर्वर से फिर से जांचता है। यदि वह विफल हो जाता है, तो ठीक है, जो आपकी पसंद को कैसे / जब आप सूचित करना चाहते हैं, में आपकी प्राथमिकता को ट्रिगर करता है।


मुझे वास्तव में यह पीएसडीआई सेवा पसंद है - बस मुफ्त खाता स्थापित करें और चेक और एसएमएस को मेरे चेक मोबाइल नंबर पर परीक्षण करें - दोनों काम - इस समय के लिए बाहर की कोशिश करेंगे और देखें कि यह कैसे जाता है।
Xoundboy

अफसोस की बात है कि पीएसडी अब फ्री टियर की पेशकश नहीं करता है। कम से कम महंगी योजना $ 14.95 / माह है।
बेन जॉनसन

आप cronitor.io का उपयोग कर सकते हैं - वे जाँच के लिए एक मुफ्त साइट प्रदान करते हैं और सूचनाओं को ईमेल, स्लैक या किसी अन्य वेबकॉक पर धकेल सकते हैं।
रिज

एक और विकल्प के लिए पीटीआईटी अपटेरोबोट , 5 मिनट के अंतराल और 50 प्लान में निगरानी रखने वाली वेबसाइट होगी। यह स्लैक और टेलीग्राम के साथ आसानी से एकीकृत होता है (पुश, एसएमएस या ईमेल अधिसूचना के अलावा ...)।
trolologuy

1

उपरोक्त का थोड़ा बदलाव।

यह जांचने के लिए कि कोई वेबसाइट हर 10 सेकंड में उपलब्ध है या नहीं। किसी siteuptime.txtफ़ाइल में लॉग प्रयास विफल हो गया, इसलिए इसे बाद में (या एक्सेल में रेखांकन) देखा जा सकता है।

#!/bin/bash
# Check site every 10 seconds, log failed connection attempts in siteuptime.txt
while true; do
echo "Checking site...";
/usr/bin/wget "http://www.mysite" --timeout 6 -O - 2>/dev/null | grep "My String On page" || echo "The site is down" | date --iso-8601=seconds >> siteuptime.txt;
sleep 10;
done;

1
#!/bin/bash

################Files to be created before starting exicution####################
# sudo apt-get install alsa alsa-utils                                                  #
# mkdir -p $HOME/scripts                                                                    #
# touch $HOME/scripts/URL_File                                                              #
# touch $HOME/scripts/alert_Data                                                            #
# touch /tmp/http                                                                               #
# touch /tmp/http_file                                                                        #
# Download alert.wav file and copy it into $HOME/scripts directory                #
#################################################################################

####### checking existing process and creating temp files for URLs###############
Proc=$(ps -ef | grep http_alerts.sh | wc -l)
number=$(ps -ef | grep http_alerts.sh)
if [ $Proc -gt 3 ]
then
    echo "Script Already Running. Please kill PID($number) and restart"
else
FILE="$HOME/scripts/URL_File"
myfileval=1
while read -r line_read; do
    echo $line_read > /tmp/http_file
    File_name=$(cat /tmp/http_file | awk -v "val=$myfileval" 'NR==val {print $2}')
    File_name_val=$(ls /tmp/$File_name 2>/dev/null | wc -l)
    File_name_val0=0
    if [ $File_name_val -eq $File_name_val0 ]
    then 
        touch /tmp/$File_name
    fi
done < "$FILE"
####### checking existing process and finding temp files for URLs###############
echo "############ SCRIPT STARTED WORKING ################"
echo "############ SCRIPT STARTED WORKING ################" >> $HOME/scripts/alert_Data
echo " " >> $HOME/scripts/alert_Data
####### Continues Loop to check the URLs without break           ###############
while true
do
#######  Reading file URLs                                       ###############
### URL formate- http or https URL; 
### remarks; if domain name 0 else 1; 
### domain without proto(http/https); 
### Public_1; Public_2; ########
filename="$HOME/scripts/URL_File" ### file path
while read -r line; do
        echo $line > /tmp/http ### inserting each line data to temparary file
### Checking Internet Connection #######
        while true
        do
            if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; 
        then   
            break
        else 
            echo "You are not connected to internet. Please wait"
            sleep 5  
        fi
        done 
### Checking Internet Connection #######
    myval=1
    i=$((i+1))
    j=7
    k=$(shuf -i 1-${j} -n 1)
    l=30
    i=$(($l+$k)) ##### Color code 31 to 37
    echo ""
    echo ""
    URL=$(cat /tmp/http |  awk -v "val=$myval" 'NR==val {print $1}')  ### 1st paramater from file. example: http://myabcd.com
    Server_State=$(cat /tmp/http |  awk -v "val=$myval" 'NR==val {print $2}') ### 2nd paramater from file. example: this_is_myabcd_site
    val3=$(cat /tmp/http | awk -v "val=$myfileval" 'NR==val {print $3}') ### 3rd paramater from file. 0 or 1
    val4=$(cat /tmp/http | awk -v "val=$myfileval" 'NR==val {print $4}') ### 4rd paramater from file. example: myabcd.com
    val5=$(cat /tmp/http | awk -v "val=$myfileval" 'NR==val {print $5}') ### 5th paramater from file. example: 123.123.123.111
    val6=$(cat /tmp/http | awk -v "val=$myfileval" 'NR==val {print $5}') ### 6th paramater from file. example: 123.123.123.222
echo "\e[1;${i}m-------------------------------------------------------------------\e[0m"
echo "\e[1;${i}m| Cheking URL :   $URL                             \e[0m"
echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
echo "\e[1;${i}m| Cheking URL :   $URL                             \e[0m" >> $HOME/scripts/alert_Data
DATA=$(date) ### time stamp 
code=$(curl -s -o /dev/null -w "%{http_code}" $URL) ### getting URL response code
if [ $code -eq 200 -o $code -eq 301 -o $code -eq 302 ] ### checking with sucessful response codes
then 
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m"
    echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m"
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m"
    echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" 
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" 
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
elif [ $code -eq 404 -o $code -eq 500 ] ### checking with error response codes
then 
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m"
    echo "\e[1;${i}m| URL IS DOWN :   $URL                             \e[0m"
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m"
    echo "\e[1;${i}m| DOWN TIME   :   $DATA                            \e[0m"
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m"
    echo "\e[1;${i}m| HTTP TIME   :   $code                            \e[0m"
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m"
    echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m"
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m| URL IS DOWN :   $URL                             \e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m| DOWN TIME   :   $DATA                            \e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m| HTTP CODE   :   $code                            \e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" >> $HOME/scripts/alert_Data
    echo "\e[1;${i}m-------------------------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
    aplay $HOME/scripts/alert.wav 2> /dev/null ### On failure buzzer will sound
    /usr/bin/truncate -s 0 /tmp/$Server_State  ### truncate the file with server failure count data
    echo " Dear Admin Team \n The $URL is DOWN for the State $Server_State. The HTTP response code is $code " | mail -s "$Server_State is down" -a "From: from@mail.com" yourmail1@mail.com,yourmail2@mail.com >> /dev/null   ### On failure sending mail
elif [ $code -eq 000 ]
then
   LNUM=$(cat /tmp/$Server_State | wc -l)
   LNUM0=0
   oval=0
    if [ $val3 -eq $oval ] ### checking Domain or Public IP
    then
    dname=$(nslookup $val4 | awk '/^Address: /{print $2}') ### getting domain name Public IPs
        for dname_i in $dname
        do
            dname_url="http://$dname_i/" ### Making Public IP as http URL
            dname_code=$(curl -s -o /dev/null -w "%{http_code}" $dname_url)  ### getting public IP response
            if [ $dname_code -eq 200 -o $dname_code -eq 301 -o $dname_code -eq 302 ]  ### If success response
            then
            echo "\e[1;${i}m---------------------------------------------------\e[0m"
            echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m"
            echo "\e[1;${i}m---------------------------------------------------\e[0m"
            echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" 
            echo "\e[1;${i}m---------------------------------------------------\e[0m" 
            echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
            echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m" >> $HOME/scripts/alert_Data
            echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
            echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" >> $HOME/scripts/alert_Data
            echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
            else #### if did not success response 
                    if [ $LNUM -eq $LNUM0 ] ### If no failure count, then add the failure count from 1
                        then
                        echo "$Server_State 0" > /tmp/$Server_State
                        else 
                        ALT=$(cat /tmp/$Server_State |  awk -v "val=$myval" 'NR==val {print $2}')  ### server failure count
                        ALT5=5
                        if [ $ALT -eq $ALT5 ] ### If failure count is 5 then alert with sound and send mail
                        then
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| URL IS DOWN :   $URL                             \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| DOWN TIME   :   $DATA                            \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| HTTP CODE   :   $code                            \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| Server State:   $Server_State                    \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| URL IS DOWN :   $URL                             \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| DOWN TIME   :   $DATA                            \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| HTTP CODE   :   $code                            \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| Server State:   $Server_State                    \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        aplay $HOME/scripts/alert.wav 2> /dev/null  ### On failure buzzer will sound
                        /usr/bin/truncate -s 0 /tmp/$Server_State   ### truncate the file with server failure count data
                        echo " Dear Admin Team \n The $URL is DOWN for the State $Server_State. The HTTP response code is $code " | mail -s "$Server_State is down" -a "From: from@mail.com" yourmail1@mail.com,yourmail2@mail.com >> /dev/null   ### On failure sending mail 
                        else
                        ALT=$((ALT+1)) ### increase server failure count
                        echo "$Server_State $ALT" > /tmp/$Server_State
                        fi
                        fi
                    fi
                    done
                    oval1=1
                    elif [ $val3 -eq $oval1 ]   ### No domain name backup public IPs are there
                    then
                        if [ "$val5" != "" ]  ### first Public IP of diffrent ISP
                        then 
                        dname_url="http://$val5/" ### making URL with public IP
                        dname_code=$(curl -s -o /dev/null -w "%{http_code}" $dname_url)   ### getting response code
                        if [ $dname_code -eq 200 -o $dname_code -eq 301 -o $dname_code -eq 302 ] ### validating response code
                        then
                        echo "\e[1;${i}m---------------------------------------------------\e[0m"
                        echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m"
                        echo "\e[1;${i}m---------------------------------------------------\e[0m"
                        echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" 
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" 
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        elif [ "$val6" != "" ]  ### second Public IP of diffrent ISP
                        then 
                        dname_url="http://$val6/" ### making URL with public IP
                        dname_code=$(curl -s -o /dev/null -w "%{http_code}" $dname_url)   ### getting response code
                        if [ $dname_code -eq 200 -o $dname_code -eq 301 -o $dname_code -eq 302 ] ### validating response code
                        then
                        echo "\e[1;${i}m---------------------------------------------------\e[0m"
                        echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m"
                        echo "\e[1;${i}m---------------------------------------------------\e[0m"
                        echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" 
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" 
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m| UP TIME     :   $DATA                            \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m| Server State:   $Server_State                    \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[1;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        else
                        if [ $LNUM -eq $LNUM0 ]
                        then
                        echo "$Server_State 0" > /tmp/$Server_State
                        else
                        ALT=$(cat /tmp/$Server_State |  awk -v "val=$myval" 'NR==val {print $2}')  ### server failure count
                        ALT5=5
                        if [ $ALT -eq $ALT5 ]
                        then
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| URL IS DOWN :   $URL                             \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| DOWN TIME   :   $DATA                            \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| HTTP CODE   :   $code                            \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m"
                        echo "\e[0;${i}m| Server State:   $Server_State                    \e[0m"
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| URL IS DOWN :   $URL                             \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| DOWN TIME   :   $DATA                            \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| HTTP CODE   :   $code                            \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m| Server State:   $Server_State                    \e[0m" >> $HOME/scripts/alert_Data
                        echo "\e[0;${i}m---------------------------------------------------\e[0m" >> $HOME/scripts/alert_Data
                        aplay $HOME/scripts/alert.wav 2> /dev/null
                        /usr/bin/truncate -s 0 /tmp/$Server_State
                        echo " Dear Admin Team \n The $URL is DOWN for the State $Server_State. The HTTP response code is $code " | mail -s "$Server_State is down" -a "From: from@mail.com" yourmail1@mail.com,yourmail2@mail.com >> /dev/null   ### On failure sending mail
                        else
                        ALT=$((ALT+1))
                        echo "$Server_State $ALT" > /tmp/$Server_State
                        fi
                    fi
                fi
            fi
        fi
    fi
fi
sleep 4
vl=1
pdate=$(ls -l $HOME/scripts/alert_Data | awk -v "val=$vl" 'NR==val {print $7}')   ### getting file created day
ddate=$(date | awk -v "val=$vl" 'NR==val {print $3}') ### current day count
if [ $pdate -gt $ddate ]  ### validating file created day and current
then 
d=`date +%m-%d-%Y`
mv $HOME/scripts/alert_Data $HOME/scripts/alert_Data$d  ### taking backup of existing file with time stamp
touch $HOME/scripts/alert_Data ### creating new file
fi
done < "$filename"
done
fi
#######################################################################################################################################################
#The content of $HOME/scripts/URL_File is as below
#Please remove "#" and Headline titles. Each parameter will be read by the difrence of spaces.
#URLoftheSite           Remarks         Domain(0)/IPstatus(1)   Domain_name(without protocol)   PublicIP_1      PublicIP_2  
#http://myexamplesite.com   this_is_myexamplesite   1           myexamplesite.com       123.123.123.111     123.123.123.222

0

जैसा कि आपके VPS पर कई साइटें हैं, मैं आपको सलाह दूंगा कि आप वेबसाइट की निगरानी साइट जैसे host-tracker.com के साथ खाता खोल सकते हैं। यदि साइट डाउन है या नहीं तो आपको अलर्ट करने के अलावा वे आपको साप्ताहिक, मासिक और वार्षिक रूप से उर साइट्स प्रदान करते हैं। प्रबंधन और प्रदर्शन के लिए व्हिश बहुत सहायक है।


0

इस बारे में कैसा है:

#!/bin/bash
/etc/init.d/httpd status
if [[ $? == 3 ]]; then
   echo "Httpd is down `date`" | mail support@example.com
   exit 1
fi
exit 0

1
मुझे सादगी पसंद है लेकिन अगर वेब साइट इंटरनेट पर उपलब्ध है तो इसका परीक्षण नहीं किया जाएगा। सेवा चालू हो सकती है लेकिन वास्तव में ग्राहकों की सेवा नहीं कर रही है। मैं उस एक के लिए पहले गिर गया हूँ।
जॉन गार्डनियर्स

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