kịch bản để tự động kiểm tra nếu một trang web có sẵn


18

Tôi là một nhà phát triển web đơn độc với VPS Centos của riêng tôi lưu trữ một vài trang web nhỏ cho khách hàng của tôi. Hôm nay tôi phát hiện ra dịch vụ httpd của mình đã dừng (không có lý do rõ ràng - nhưng đó là một chủ đề khác). Tôi đã khởi động lại nó nhưng bây giờ tôi cần tìm cách có thể thông báo qua email và / hoặc SMS nếu nó xảy ra lần nữa - tôi không thích khi khách hàng gọi cho tôi để nói với tôi rằng trang web của họ không hoạt động!

Tôi biết có lẽ có nhiều khả năng khác nhau, bao gồm cả phần mềm giám sát máy chủ. Tôi nghĩ rằng tất cả những gì tôi thực sự cần là một tập lệnh mà tôi có thể chạy như một công việc định kỳ từ máy chủ dev của tôi (đang chạy vĩnh viễn trong văn phòng của tôi) cố gắng tải một trang từ máy chủ sản xuất của tôi và nếu nó không tải trong vòng 30 Vài giây sau đó nó sẽ gửi cho tôi một email hoặc SMS. Tôi khá rác rưởi trong kịch bản shell, vì vậy câu hỏi này.

Bất kỳ đề xuất sẽ được biết ơn đánh giá cao.


3
Bạn đã nhìn vào Nagios hay Pingdom chưa? Chúng có chức năng được tích hợp sẵn (Chà, Pingdom có ​​SMS được tích hợp, với Nagios, nó đòi hỏi một chút thao tác nhưng có thể)
Smudge

Không, tôi sẽ xem bây giờ, cảm ơn vì lời khuyên.
Xoundboy

Câu trả lời:


13

Chà ... Kịch bản đơn giản nhất, tôi cam viết:

/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

Thêm nó vào cron như:

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

Nhưng nó quá đơn giản để cho bạn biết vấn đề là gì nếu nó tồn tại.

CẬP NHẬT: Bây giờ, một lớp lót này kiểm tra một chuỗi cụ thể trên trang ("Chuỗi hoạt động bình thường"), chỉ xuất hiện trên hoạt động bình thường.

CẬP NHẬT2: Một cách đơn giản để gửi trang lỗi trong e-mail:

/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

Điểm trừ là trang được yêu cầu lại trong trường hợp thử nghiệm thất bại đầu tiên. Lần này yêu cầu có thể thành công và bạn sẽ không thấy lỗi. Tất nhiên, có thể lưu trữ đầu ra và gửi nó dưới dạng tệp đính kèm, nhưng nó sẽ làm cho tập lệnh phức tạp hơn.


Nhìn thú vị .... vậy nếu trang không tải trong vòng 30 giây, một email sẽ được gửi phải không? Điều gì xảy ra nếu trang tải nhưng thông báo lỗi được hiển thị - làm thế nào điều này có thể được điều chỉnh để kiểm tra đầu ra cụ thể?
Xoundboy

Cập nhật câu trả lời. Nhưng kịch bản vẫn không gửi cho bạn lỗi.
HUB

- xin chào, cảm ơn về bản cập nhật - Tôi đang cố gắng để nó hoạt động trên máy của mình - Tôi không nghĩ rằng phần thư của lệnh đang thực hiện đúng cách - không có thời gian nào để khắc phục sự cố nhưng sẽ thử lại ngày mai hoặc càng sớm càng tốt.
Xoundboy

Chà ... Hãy thử chạy chương trình thư bằng tay và kiểm tra đầu ra. Đồng thời xem "/ var / log / mail" để biết kết quả Kiểm tra cài đặt tường lửa (nên cho phép truy cập vào cổng 25 từ xa).
HUB

8

Hãy xem kịch bản này:

curllà một tiện ích dòng lệnh để tìm nạp một URL. Tập lệnh kiểm tra mã thoát ($? Đề cập đến mã thoát của lệnh gần đây nhất trong tập lệnh shell) và nếu đó là bất cứ điều gì khác 0, báo cáo lỗi (mã thoát 0 thường đề cập đến thành công). Như đã đề cập trong câu trả lời của HUB, bạn cũng có thể chỉ ||trên dòng lệnh để chạy lệnh thứ hai khi lệnh đầu tiên thất bại.

Một khi bạn đã tìm ra trạng thái, bạn chỉ cần gửi cho mình một số thư. Dưới đây là một ví dụ sử dụng maillệnh để gửi thư từ tập lệnh shell, giả sử hộp bạn đang kiểm tra có cài đặt SMTP:

BTW: nếu bạn không giỏi về kịch bản shell, đừng giới hạn bản thân trong kịch bản shell. Bạn có thể sử dụng tập lệnh ruby, tập lệnh php, bất kỳ loại tập lệnh nào mà máy chủ của bạn có thể chạy! Chỉ cần thêm #!/path/to/executabledòng ở đầu tập lệnh - ví dụ:

#!/usr/bin/php


Cảm ơn cho đầu vào của bạn - Tôi sẽ kiểm tra giải pháp này ngay khi tôi nhận được một chút. Sẽ báo cáo lại sớm.
Xoundboy

6

Kiểm tra kịch bản này . nó đang kiểm tra danh sách các trang web và gửi email (đến danh sách email) bất cứ khi nào có lỗi (phản hồi http khác với 200). Tập lệnh tạo tệp .temp để "nhớ" trang web nào bị lỗi ở lần kiểm tra cuối cùng để bạn không nhận được nhiều email. tệp .temp bị xóa khi trang web hoạt động trở lại.

#!/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

Thêm các dòng sau vào cấu hình crontab ($ crontab -e)

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

Có sẵn trên Github


2

Tôi biết rằng tất cả các tập lệnh trên là chính xác những gì bạn đã hỏi, nhưng tôi sẽ khuyên bạn nên xem monit vì nó sẽ gửi email cho bạn nếu apache không hoạt động nhưng nó cũng sẽ khởi động lại (nếu nó bị hỏng).


Điều này cũng có vẻ thú vị - Tôi sẽ cố gắng tìm thời gian để kiểm tra sớm và trả lại kết quả của tôi.
Xoundboy

1

Tôi muốn giới thiệu pingdom cho việc này. Dịch vụ miễn phí của họ cho phép bạn kiểm tra 1 trang web, nhưng đó là tất cả những gì bạn cần để kiểm tra 1 máy chủ. Nếu bạn có iPhone, họ sẽ nhắn tin miễn phí cho bạn, vì vậy không cần phải mua tín dụng SMS từ họ và họ có nhiều cài đặt bạn có thể sử dụng. Của tôi được thiết lập để thông báo cho tôi sau 2 lần thử lại (10 phút) và cứ sau 10 phút ngừng hoạt động sau đó. Thật tuyệt vời, vì nó cũng kiểm tra các thông điệp HTTP 500 cho thấy một trang web bị sập. Nếu thất bại, nó ngay lập tức kiểm tra lại trang web của bạn từ một máy chủ khác ở một vị trí khác. Nếu điều đó không thành công, điều đó sẽ kích hoạt sở thích của bạn về cách thức / thời điểm bạn muốn nhận thông báo.


Tôi thực sự thích dịch vụ Pingdom này - chỉ cần thiết lập tài khoản miễn phí và kiểm tra séc và SMS đến số điện thoại di động Séc của tôi - cả hai đều hoạt động - sẽ thử điều này trong thời gian hiện tại và xem nó hoạt động như thế nào.
Xoundboy

Đáng buồn thay, Pingdom không còn xuất hiện để cung cấp tầng miễn phí. Gói ít tốn kém nhất là $ 14,95 / tháng.
Ben Johnson

Bạn có thể sử dụng cronitor.io - họ cung cấp một trang web miễn phí để kiểm tra và có thể đẩy thông báo đến email, chùng hoặc bất kỳ webhook nào khác.
Riz

Một lựa chọn khác cho pingdom sẽ là gainimerobot , khoảng thời gian theo dõi 5 phút và 50 trang web được theo dõi trong gói miễn phí. Nó cũng tích hợp dễ dàng với slack và telegram (bên cạnh thông báo đẩy, SMS hoặc email, ...).
trolologuy

1

Biến thể nhẹ của ở trên.

Một kịch bản để kiểm tra nếu một trang web có sẵn cứ sau 10 giây. Đăng nhập các lần thử thất bại vào một siteuptime.txttệp để có thể xem xét (hoặc vẽ biểu đồ trong excel) sau đó.

#!/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

Vì bạn có nhiều trang web trên VPS của mình, tôi khuyên bạn nên mở tài khoản với trang web theo dõi trang web như host-tracker.com. Ngoài việc thông báo cho bạn nếu trang web bị sập hay không, họ còn cung cấp cho bạn thời gian hoạt động hàng tuần, hàng tháng và hàng năm của các trang web của bạn. Whish rất hữu ích cho quản lý và hiệu suất.


0

Còn cái này thì sao:

#!/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
Tôi thích sự đơn giản nhưng điều đó sẽ không kiểm tra nếu trang web có sẵn qua Internet. Dịch vụ có thể đang chạy nhưng không thực sự phục vụ khách hàng. Tôi đã yêu cái đó trước đây.
John Gardeniers

2
Mặc dù vậy, đồng ý, nếu bạn muốn đảm bảo rằng nó có thể truy cập được từ Internet, bạn phải kiểm tra nó qua Internet. Ngay cả việc chạy wget trên máy chủ với giao diện mạng bên ngoài cũng không phải là một thử nghiệm chính xác mà Internet có thể truy cập.
ếchstarr78
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.