স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে পরীক্ষা করতে যদি কোনও ওয়েবসাইট উপলব্ধ থাকে


18

আমি আমার নিজস্ব সেন্টস ভিপিএস সহ আমার ক্লায়েন্টদের জন্য কয়েকটি ছোট ওয়েব সাইট হোস্ট করে একা একা ওয়েব বিকাশকারী। আজ আমি আবিষ্কার করেছি যে আমার 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

তবে সমস্যাটি যদি বিদ্যমান থাকে তবে তা কী তা আপনার পক্ষে বলা খুব সহজ।

ইউপিডি: এখন এই ওয়ান-লাইনার পৃষ্ঠায় একটি নির্দিষ্ট স্ট্রিং ("সাধারণ অপারেশন স্ট্রিং") যাচাই করে, যা কেবলমাত্র সাধারণ অপারেশনে প্রদর্শিত হবে।

ইউপিডি 2: ইমেইলে ত্রুটি পৃষ্ঠাটি প্রেরণের একটি সহজ উপায়:

/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

উত্তর আপডেট করেছেন। তবে স্ক্রিপ্টটি এখনও আপনাকে ত্রুটি পাঠায় না।
হাব

- হাই, আপডেটের জন্য ধন্যবাদ - আমি আমার মেশিনে এটি কাজ করার জন্য লড়াই করে যাচ্ছি - আমি মনে করি না কমান্ডের মেইল ​​অংশটি এটি সঠিকভাবে করছে কিনা - সমস্যা সমাধানের জন্য এখন আর সময় পাইনি তবে চেষ্টা করবে আবার আগামীকাল বা asap।
Xoundboy

ভাল ... মেল প্রোগ্রামটি ম্যানুয়ালি চালানোর চেষ্টা করুন এবং আউটপুট চেক করুন। ফলাফলের জন্য "/ var / লগ / মেল" দেখুন ফায়ারওয়াল সেটিংস চেক করুন (রিমোট পোর্ট 25 এ প্রবেশের অনুমতি দেওয়া উচিত)।
এইচবি

8

এই স্ক্রিপ্ট একবার দেখুন:

curlURL আনার জন্য একটি কমান্ড-লাইন ইউটিলিটি। স্ক্রিপ্টটি প্রস্থান কোডটি পরীক্ষা করে ($? শেল স্ক্রিপ্টে সর্বাধিক সাম্প্রতিক কমান্ডের প্রস্থান কোড বোঝায়) এবং যদি এটি 0 ছাড়া অন্য কিছু ছিল তবে একটি ত্রুটি রিপোর্ট করে (0 এর একটি প্রস্থান কোড সাধারণত সাফল্য বোঝায়)। হাবের উত্তরে উল্লিখিত হিসাবে, ||প্রথমটি ব্যর্থ হলে আপনি কেবল দ্বিতীয় কমান্ড চালানোর জন্য কমান্ড-লাইনেও যেতে পারেন।

একবার আপনি স্থিতিটি বের হয়ে গেলে, আপনাকে কেবল নিজেকে কিছু মেল পাঠাতে হবে। এখানে একটি উদাহরণ যা mailশেল স্ক্রিপ্ট থেকে মেল প্রেরণের জন্য কমান্ডটি ব্যবহার করে আপনি ধরে নিচ্ছেন যে বাক্সটি আপনি পরীক্ষা করছেন তার এসএমটিপি সেটআপ রয়েছে:

বিটিডাব্লু: আপনি যদি শেল স্ক্রিপ্টিংয়ে ভাল না হন তবে নিজেকে শেল স্ক্রিপ্টে সীমাবদ্ধ করবেন না। আপনি রুবি স্ক্রিপ্ট, একটি পিএইচপি স্ক্রিপ্ট, আপনার সার্ভার যে কোনও ধরণের স্ক্রিপ্ট চালাতে পারেন! #!/path/to/executableস্ক্রিপ্টের শুরুতে কেবল লাইনটি যুক্ত করুন - উদাহরণস্বরূপ:

#!/usr/bin/php


আপনার ইনপুট জন্য ধন্যবাদ - আমি একটি মুহুর্ত পাওয়ার সাথে সাথে এই সমাধানটি যাচাই করতে যাচ্ছি। শীঘ্রই রিপোর্ট করা হবে।
শাউন্ডবয়

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

ক্রন্টব কনফিগারেশনে নিম্নলিখিত রেখাগুলি যুক্ত করুন (ont crontab -e)

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

গিথুবে পাওয়া যায়


2

আমি জানি যে উপরের সমস্ত স্ক্রিপ্টগুলি আপনি যা চেয়েছিলেন ঠিক তেমনই, তবে আমি মনিটকে দেখার পরামর্শ দিচ্ছি কারণ এটি যদি আপনাকে অ্যাপাচি নিচে থাকে তবে এটি আপনাকে একটি ইমেল পাঠাবে তবে এটি পুনরায় চালু হবে (যদি এটি নিচে থাকে)।


এটিও আকর্ষণীয় দেখায় - আমি শীঘ্রই এটি পরীক্ষা করার জন্য সময় বের করার চেষ্টা করব এবং [আমার অনুসন্ধানগুলি ফিরে পেলাম)।
Xoundboy

1

আমি এই জন্য পিংডম সুপারিশ করব। তাদের নিখরচায় পরিষেবা আপনাকে 1 টি সাইট চেক করতে দেয় তবে আপনাকে কেবল 1 টি সার্ভার চেক করতে হবে। আপনার যদি আইফোন থাকে তবে তারা আপনাকে নিখরচায় পুশ ম্যাসেজ দেয়, সুতরাং তাদের কাছ থেকে এসএমএস ক্রেডিট কেনার দরকার নেই এবং আপনার ব্যবহার করতে পারেন এমন একাধিক সেটিংস রয়েছে। আমার 2 টি পুনরায় চেষ্টা (10 মিনিট) এবং তার পরে প্রতি 10 মিনিট ডাউনটাইমের পরে আমাকে অবহিত করবে set এটি দুর্দান্ত, কারণ এটি কোনও সাইটটি নিচে থাকার ইঙ্গিতটি এইচটিটিপি 500 বার্তাগুলির জন্যও পরীক্ষা করে। যদি এটি ব্যর্থ হয়, এটি তত্ক্ষণাত্ আপনার সাইটকে অন্য কোনও সার্ভার থেকে আলাদা কোনও স্থানে আবার পরীক্ষা করে। যদি এটি ব্যর্থ হয় তবে ভাল, এটি আপনাকে / কখন অবহিত করতে চাইলে আপনার পছন্দটিকে ট্রিগার করে।


আমি এই পিংডম পরিষেবাটি সত্যই পছন্দ করি - কেবলমাত্র নিখরচায় অ্যাকাউন্ট স্থাপন করুন এবং আমার চেক মোবাইল নম্বরটিতে চেকটি পরীক্ষা এবং এসএমএস - উভয়ই কাজ - আপাতত এটি চেষ্টা করে দেখবে যে এটি কীভাবে চলেছে।
Xoundboy

দুঃখের বিষয়, পিংডম আর ফ্রি টায়ারের প্রস্তাব দেয় না। সর্বনিম্ন ব্যয়বহুল পরিকল্পনাটি হল। 14.95 / মাস month
বেন জনসন

আপনি cronitor.io ব্যবহার করতে পারেন - তারা চেক করার জন্য একটি ফ্রি সাইট সরবরাহ করে এবং ইমেল, স্ল্যাক বা অন্য কোনও ওয়েবহুকের জন্য বিজ্ঞপ্তিগুলি ধাক্কা দিতে পারে।
রিজ

পিংডমের আরেকটি বিকল্প হ'ল আপটাইমবোট , 5 মিনিটের মনিটরিং অন্তর এবং বিনামূল্যে পরিকল্পনায় 50 টি পর্যবেক্ষণ করা ওয়েবসাইট। এটি স্ল্যাক এবং টেলিগ্রামের সাথে খুব সহজেই সংহত করে (পুশ, এসএমএস বা ইমেল বিজ্ঞপ্তি ছাড়াও ...)।
ট্রলোলজয়

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

আপনার ভিপিএসে আপনার অনেকগুলি সাইট রয়েছে তাই আমি আপনাকে সুপারিশ করব আপনি হোস্ট- ট্র্যাকার ডটকমের মতো ওয়েবসাইট মনিটরিং সাইট দিয়ে অ্যাকাউন্ট খুলতে পারেন। সাইটটি ডাউন থাকলে বা না হয় সে সম্পর্কে আপনাকে সতর্কতা ছাড়াও তারা আপনাকে আপনার সাইটের সাপ্তাহিক, মাসিক এবং বার্ষিক আপটাইম সরবরাহ করে। হুইশ পরিচালনা এবং পারফরম্যান্সের জন্য খুব সহায়ক।


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
সম্মত হয়েছে, যদিও, আপনি যদি এটি ইন্টারনেট থেকে অ্যাক্সেসযোগ্য তা নিশ্চিত করতে চান তবে আপনাকে এটি ইন্টারনেটে পরীক্ষা করতে হবে। এমনকি এটি বাহ্যিক নেটওয়ার্ক ইন্টারফেসে সার্ভারে উইজেট চালানো কোনও সঠিক পরীক্ষা হবে না যা ইন্টারনেট এটি অ্যাক্সেস করতে পারে।
ফ্রগস্টায়ার 78
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.