สคริปต์เพื่อทดสอบโดยอัตโนมัติหากมีเว็บไซต์


18

ฉันเป็นผู้พัฒนาเว็บไซต์โดดเดี่ยวที่มี Centos VPS ของตัวเองที่โฮสต์เว็บไซต์เล็ก ๆ น้อย ๆ สำหรับลูกค้าของฉัน วันนี้ฉันค้นพบบริการ httpd ของฉันหยุดทำงาน (โดยไม่มีเหตุผลที่ชัดเจน - แต่นั่นเป็นอีกเธรดหนึ่ง) ฉันรีสตาร์ท แต่ตอนนี้ฉันต้องหาวิธีที่ฉันจะได้รับแจ้งทางอีเมลและ / หรือ SMS หากมันเกิดขึ้นอีกครั้ง - ฉันไม่ชอบเมื่อลูกค้าของฉันโทรหาฉันเพื่อบอกเว็บไซต์ของพวกเขาไม่ทำงาน!

ฉันรู้ว่าอาจมีความเป็นไปได้ที่แตกต่างกันมากมายรวมถึงซอฟต์แวร์ตรวจสอบสถานะเซิร์ฟเวอร์ ฉันคิดว่าสิ่งที่ฉันต้องการจริงๆคือสคริปต์ที่ฉันสามารถเรียกใช้เป็นงาน cron จากโฮสต์ dev ของฉัน (ซึ่งทำงานในสำนักงานของฉันอย่างถาวร) ที่พยายามโหลดหน้าจากเซิร์ฟเวอร์ที่ใช้งานจริงของฉันและถ้ามันไม่โหลดภายใน 30 วัน วินาทีจากนั้นจะส่งอีเมลหรือ SMS ฉันค่อนข้างขยะที่เชลล์สคริปต์ดังนั้นคำถามนี้

ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมอย่างสุดซึ้ง


3
คุณเคยดู Nagios หรือ Pingdom บ้างไหม? พวกมันมีฟังก์ชั่นการใช้งานในตัว (อย่างดี Pingdom มี SMS ในตัวพร้อม Nagios ต้องใช้เวลาในการกระตุก แต่ก็เป็นไปได้)
Smudge

ไม่ฉันจะดูตอนนี้ขอบคุณสำหรับคำแนะนำ
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

เพิ่มลงใน cron เป็น:

* * * * * /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

- สวัสดีขอบคุณสำหรับการอัปเดต - ฉันพยายามดิ้นรนเพื่อให้มันทำงานบนเครื่องของฉัน - ฉันไม่คิดว่าส่วนอีเมลของคำสั่งจะทำสิ่งที่ถูกต้อง - ตอนนี้ยังไม่มีเวลาแก้ไขปัญหา แต่จะพยายาม พรุ่งนี้อีกครั้งหรือโดยเร็ว
Xoundboy

ดี ... ลองเรียกใช้โปรแกรมจดหมายด้วยตนเองและตรวจสอบผลลัพธ์ โปรดดูผลลัพธ์ "/ var / log / mail" ตรวจสอบการตั้งค่าไฟร์วอลล์ (ควรอนุญาตให้เข้าถึงพอร์ตระยะไกล 25)
HUB

8

ลองดูที่สคริปต์นี้:

curlเป็นโปรแกรมอรรถประโยชน์บรรทัดคำสั่งเพื่อดึง URL สคริปต์ตรวจสอบรหัสออก ($? หมายถึงรหัสออกของคำสั่งล่าสุดในเชลล์สคริปต์) และหากเป็นอย่างอื่นที่ไม่ใช่ 0 ให้รายงานข้อผิดพลาด (รหัสทางออกที่ 0 หมายถึงความสำเร็จโดยทั่วไป) ดังที่ได้กล่าวไว้ในคำตอบของ HUB คุณสามารถ||ใช้บรรทัดคำสั่งเพื่อรันคำสั่งที่สองเมื่อคำสั่งแรกล้มเหลว

เมื่อคุณพบสถานะแล้วคุณจะต้องส่งจดหมายให้ตัวเอง นี่คือตัวอย่างที่ใช้mailคำสั่งเพื่อส่งจดหมายจากเชลล์สคริปต์โดยสมมติว่ากล่องที่คุณกำลังทดสอบมีการตั้งค่า SMTP:

BTW: หากคุณไม่เก่งในการเขียนสคริปต์เชลล์อย่า จำกัด ตัวเองไว้ที่เชลล์สคริปต์ คุณสามารถใช้ ruby ​​script, php script, สคริปต์ชนิดใดก็ได้ที่เซิร์ฟเวอร์ของคุณสามารถทำงานได้! เพียงเพิ่ม#!/path/to/executableบรรทัดที่จุดเริ่มต้นของสคริปต์ - ตัวอย่างเช่น:

#!/usr/bin/php


ขอบคุณสำหรับข้อมูลของคุณ - ฉันจะตรวจสอบโซลูชันนี้ทันทีที่ฉันได้สักครู่ จะรายงานกลับมาเร็ว ๆ นี้
Xoundboy

6

ตรวจสอบสคริปต์นี้ มันกำลังตรวจสอบกับรายการเว็บไซต์และส่งอีเมล (ไปยังรายการอีเมล) เมื่อใดก็ตามที่มีสิ่งผิดปกติ (การตอบสนอง http แตกต่างจาก 200) สคริปต์สร้างไฟล์. temp เพื่อ "จดจำ" เว็บไซต์ที่ล้มเหลวในการตรวจสอบครั้งล่าสุดดังนั้นคุณจะไม่ได้รับอีเมลหลายฉบับ ไฟล์. 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 ($ crontab -e)

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

พร้อมใช้งานบน Github


2

ฉันรู้ว่าสคริปต์ข้างต้นทั้งหมดเป็นสิ่งที่คุณถาม แต่ฉันขอแนะนำให้ดู monit เพราะมันจะส่งอีเมลถึงคุณถ้า apache ไม่ทำงาน แต่จะรีสตาร์ทมัน (ถ้ามันลง)


สิ่งนี้ดูน่าสนใจด้วย - ฉันจะพยายามหาเวลามาตรวจดูในไม่ช้าและจะหาข้อสรุปของฉัน
Xoundboy

1

ฉันจะแนะนำ pingdom สำหรับสิ่งนี้ บริการฟรีของพวกเขาช่วยให้คุณตรวจสอบ 1 ไซต์ แต่นั่นคือทั้งหมดที่คุณต้องตรวจสอบเซิร์ฟเวอร์ 1 แห่ง หากคุณมี iPhone พวกเขาจะส่งข้อความถึงคุณฟรีไม่จำเป็นต้องซื้อเครดิต SMS จากพวกเขาและพวกเขามีการตั้งค่าหลายอย่างที่คุณสามารถใช้ได้ การตั้งค่าของฉันจะแจ้งเตือนฉันหลังจาก 2 ครั้ง (10 นาที) และทุก ๆ 10 นาทีหลังจากนั้น มันยอดเยี่ยมมากเพราะมันจะตรวจสอบข้อความ HTTP 500 ที่ระบุว่าไซต์ไม่ทำงาน ถ้ามันล้มเหลวมันจะตรวจสอบเว็บไซต์ของคุณอีกครั้งจากเซิร์ฟเวอร์ที่แตกต่างกันในตำแหน่งที่ตั้งอื่น หากสิ่งนั้นล้มเหลวนั่นจะเป็นตัวกำหนดความต้องการของคุณในวิธี / เวลาที่คุณต้องการรับการแจ้งเตือน


ฉันชอบบริการ Pingdom นี้มาก - เพียงแค่ตั้งค่าบัญชีฟรีและทดสอบการตรวจสอบและ SMS ไปยังหมายเลขโทรศัพท์มือถือเช็กของฉัน - ทั้งที่ทำงาน - จะลองทำสิ่งนี้ในตอนนี้และดูว่ามันจะเป็นอย่างไร
Xoundboy

น่าเสียดายที่ Pingdom ดูเหมือนจะไม่เสนอระดับฟรีอีกต่อไป แผนราคาถูกที่สุดคือ $ 14.95 / เดือน
เบ็นจอห์นสัน

คุณสามารถใช้cronitor.io - พวกเขาเสนอหนึ่งเว็บไซต์ฟรีสำหรับการตรวจสอบและสามารถส่งการแจ้งเตือนไปยังอีเมล, หย่อนหรืออื่น ๆ webhook
Riz

อีกทางเลือกหนึ่งสำหรับการ pingdom คือuptimerobot , 5 นาทีตรวจสอบช่วงเวลาและ 50 เว็บไซต์ตรวจสอบในแผนฟรี มันรวมได้อย่างง่ายดายด้วยหย่อนและโทรเลขด้วย (นอกเหนือจากการผลัก, SMS หรืออีเมลแจ้งเตือน, ... )
trolologuy

1

การเปลี่ยนแปลงเล็กน้อยของด้านบน

สคริปต์เพื่อตรวจสอบว่ามีเว็บไซต์ให้บริการทุก 10 วินาทีหรือไม่ ความพยายามในการบันทึกล้มเหลวลงในsiteuptime.txtไฟล์เพื่อให้สามารถดู (หรือกราฟใน excel) ในภายหลัง

#!/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 นอกเหนือจากการแจ้งเตือนคุณหากไซต์หยุดทำงานหรือไม่เว็บไซต์เหล่านี้ยังให้บริการเว็บไซต์รายสัปดาห์รายเดือนและรายปีแก่คุณ Whish มีประโยชน์มากสำหรับการจัดการและประสิทธิภาพ


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
ฉันชอบความเรียบง่าย แต่จะไม่ทดสอบว่าเว็บไซต์นั้นมีให้บริการบนอินเทอร์เน็ตหรือไม่ บริการอาจทำงานอยู่ แต่ไม่ได้ให้บริการลูกค้า ก่อนหน้านี้ฉันเคยเสียไปแล้ว
John Gardeniers

2
ตกลงแม้ว่าถ้าคุณต้องการให้แน่ใจว่าสามารถเข้าถึงได้จากอินเทอร์เน็ตคุณจะต้องทดสอบผ่านทางอินเทอร์เน็ต แม้การเรียกใช้ wget บนเซิร์ฟเวอร์ไปยังอินเทอร์เฟซเครือข่ายภายนอกจะไม่เป็นการทดสอบที่แม่นยำว่าอินเทอร์เน็ตสามารถเข้าถึงได้
frogstarr78
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.