웹 사이트를 사용할 수 있는지 자동으로 테스트하는 스크립트


18

저는 고객을 위해 몇 개의 작은 웹 사이트를 호스팅하는 자체 Centos VPS를 보유한 고독한 웹 개발자입니다. 오늘 나는 httpd 서비스가 중단되었다는 것을 알았습니다 (명백한 이유는 없지만 다른 스레드입니다). 나는 그것을 다시 시작했지만 이제는 다시 발생하면 이메일 및 / 또는 SMS로 통보받을 수있는 방법을 찾아야합니다. 고객이 웹 사이트가 작동하지 않는다고 나에게 울리면 좋아하지 않습니다!

서버 모니터링 소프트웨어를 포함하여 많은 다른 가능성이 있다는 것을 알고 있습니다. 필자가 실제로 필요한 것은 프로덕션 서버에서 페이지를로드하려고 시도하는 내 호스트 호스트 (내 사무실에서 영구적으로 실행 중)에서 cron 작업으로 실행할 수있는 스크립트라고 생각합니다. 몇 초 후 이메일이나 SMS를 보냅니다. 나는 쉘 스크립팅에 꽤 쓰레기 이므로이 질문.

모든 제안에 감사드립니다.


3
Nagios 또는 Pingdom을 살펴 보셨습니까? 그들은 그 기능이 내장되어 있습니다 (Pingdom에는 SMS가 내장되어 있으며 Nagios에는 약간의 tweeking이 필요하지만 가능합니다)
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

이 스크립트를 살펴보십시오.

curlURL을 가져 오는 명령 줄 유틸리티입니다. 스크립트는 종료 코드를 확인하고 ($?는 쉘 스크립트에서 가장 최근 명령의 종료 코드를 나타냄) 0이 아닌 다른 경우 오류를보고합니다 (종료 코드 0은 일반적으로 성공을 나타냄). HUB의 답변에서 언급했듯이 ||명령 줄에서 첫 번째 명령이 실패 할 때 두 번째 명령을 실행할 수도 있습니다 .

상태가 파악되면 메일을 보내면됩니다. 다음은 mail테스트중인 상자에 SMTP 설정이 있다고 가정하고 명령을 사용하여 쉘 스크립트에서 메일을 보내는 예입니다 .

BTW : 쉘 스크립팅에 능숙하지 않다면, 자신을 쉘 스크립트로 제한하지 마십시오. 루비 스크립트, PHP 스크립트, 서버가 실행할 수있는 모든 종류의 스크립트를 사용할 수 있습니다! #!/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

위의 모든 스크립트가 정확히 요청한 것임을 알고 있지만 아파치가 다운되면 이메일을 보내지 만 다시 시작합니다 (다운 된 경우).


이것도 흥미로워 보입니다. 곧 확인을 위해 시간을 찾아 내고 다시 찾게됩니다.
Xoundboy

1

나는 이것을 위해 핑돔을 추천 할 것입니다. 무료 서비스를 통해 1 개의 사이트를 확인할 수 있지만 1 개의 서버 만 확인하면됩니다. iPhone을 사용하는 경우 무료로 푸시 메시지를 보내므로 SMS 크레딧을 구입할 필요가 없으며 사용할 수있는 여러 설정이 있습니다. 2 번의 재시도 (10 분) 후 그리고 그 후 10 분마다 다운 타임이 발생했습니다. 사이트가 다운되었음을 나타내는 HTTP 500 메시지도 확인하기 때문에 훌륭합니다. 실패하면 다른 위치의 다른 서버에서 즉시 사이트를 다시 확인합니다. 그 중 하나라도 실패하면 알림을받는 방법 /시기에 환경 설정이 트리거됩니다.


나는이 Pingdom 서비스를 정말 좋아합니다. 무료 계정을 설정하고 체코 휴대 전화 번호로 수표와 SMS를 테스트했습니다.
Xoundboy

안타깝게도 Pingdom은 더 이상 프리 티어를 제공하지 않는 것으로 보입니다. 가장 저렴한 요금은 $ 14.95 / 월입니다.
벤 존슨

cronitor.io 를 사용하면 확인할 수있는 하나의 무료 사이트를 제공하며 전자 메일, 여유 시간 또는 기타 웹 후크에 알림을 푸시 할 수 있습니다.
Riz

Pingdom의 또 다른 대안은 가동 시간 로봇 , 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과 같은 웹 사이트 모니터링 사이트에서 계정을 열 수 있습니다. 사이트가 다운되었는지 여부를 알리는 것 외에도 ur 사이트의 주별, 월별 및 연간 가동 시간을 제공합니다. 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.