Skript, um automatisch zu testen, ob eine Website verfügbar ist

18

Ich bin ein unabhängiger Webentwickler mit meinem eigenen Centos VPS, der ein paar kleine Websites für meine Kunden hostet. Heute habe ich festgestellt, dass mein httpd-Dienst gestoppt wurde (ohne ersichtlichen Grund - aber das ist ein anderer Thread). Ich habe es neu gestartet, aber jetzt muss ich einen Weg finden, wie ich per E-Mail und / oder SMS benachrichtigt werden kann, wenn es wieder passiert. Ich mag es nicht, wenn mein Kunde mich anruft und mir mitteilt, dass die Website nicht funktioniert!

Ich weiß, dass es wahrscheinlich viele verschiedene Möglichkeiten gibt, einschließlich Serverüberwachungssoftware. Ich denke, alles, was ich wirklich brauche, ist ein Skript, das ich als Cron-Job von meinem Entwicklerhost ausführen kann (der permanent in meinem Büro ausgeführt wird), der versucht, eine Seite von meinem Produktionsserver zu laden, und wenn es nicht innerhalb von etwa 30 geladen wird Sekunden später schickt es mir eine E-Mail oder SMS. Ich bin ein ziemlicher Quatsch beim Schreiben von Shell-Skripten, daher diese Frage.

Alle Vorschläge würden dankbar geschätzt.

Xoundboy
quelle
3
Hast du dir Nagios oder Pingdom angesehen? Sie haben diese Funktionalität eingebaut (Naja, Pingdom hat SMS eingebaut, bei Nagios ist ein bisschen Tweek nötig, aber es ist möglich)
Smudge
Nein, ich werde jetzt einen Blick darauf werfen, danke für den Rat.
Xoundboy

Antworten:

13

Nun ... Das einfachste Skript, das ich schreiben kann:

/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

Füge es zu cron hinzu als:

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

Aber es ist zu einfach, Ihnen das Problem zu erklären, wenn es existiert.

UPD: Dieser Einzeiler sucht nun auf der Seite nach einer bestimmten Zeichenfolge ("Normal operation string"), die nur im Normalbetrieb angezeigt werden sollte.

UPD2: Eine einfache Möglichkeit, die Fehlerseite in der E-Mail zu senden:

/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

Ein Minus ist, dass die Seite im Falle eines ersten Testfehlers erneut angefordert wird. Diesmal ist die Anforderung möglicherweise erfolgreich und der Fehler wird nicht angezeigt. Natürlich ist es möglich, die Ausgabe zu speichern und als Anhang zu senden, aber das Skript wird dadurch komplexer.

NABE
quelle
Sieht interessant aus ... also, wenn die Seite nicht innerhalb von 30 Sekunden geladen wird, wird eine E-Mail gesendet, oder? Was passiert, wenn die Seite geladen wird, aber eine Fehlermeldung angezeigt wird? Wie kann diese angepasst werden, um auf eine bestimmte Ausgabe zu testen?
Xoundboy
Die Antwort wurde aktualisiert. Das Skript sendet Ihnen den Fehler jedoch immer noch nicht.
HUB
- Hi, danke für das Update - Ich habe Mühe, dies auf meinem Computer zum Laufen zu bringen - Ich glaube nicht, dass der Mail-Teil des Befehls seine Sache richtig macht - Ich habe jetzt keine Zeit, um Fehler zu beheben, werde es aber versuchen wieder morgen oder so schnell wie möglich.
Xoundboy
Nun ... Versuchen Sie, das Mail-Programm manuell auszuführen und die Ausgabe zu überprüfen. Überprüfen Sie die Firewall-Einstellungen (der Zugriff auf Remote-Port 25 sollte erlaubt sein).
HUB
8

Schauen Sie sich dieses Skript an:

curlist ein Befehlszeilenprogramm zum Abrufen einer URL. Das Skript überprüft den Exit-Code ($? Bezieht sich auf den Exit-Code des letzten Befehls in einem Shell-Skript) und meldet einen Fehler, wenn er nicht 0 ist (ein Exit-Code von 0 bezieht sich im Allgemeinen auf Erfolg). Wie in der Antwort von HUB erwähnt, können Sie auch einfach ||in der Befehlszeile einen zweiten Befehl ausführen, wenn der erste fehlschlägt.

Sobald Sie den Status herausgefunden haben, müssen Sie sich nur noch eine E-Mail senden. In diesem Beispiel wird der mailBefehl zum Senden von E-Mails über ein Shell-Skript verwendet, vorausgesetzt, die Box, auf der Sie testen, verfügt über SMTP-Setup:

Übrigens: Wenn Sie nicht gut mit Shell-Skripten umgehen können, beschränken Sie sich nicht auf ein Shell-Skript. Sie könnten ein Ruby-Skript, ein PHP-Skript, jede Art von Skript verwenden, die Ihr Server ausführen kann! Fügen Sie einfach die #!/path/to/executableZeile am Anfang des Skripts ein - zum Beispiel:

#!/usr/bin/php

mltsy
quelle
Vielen Dank für Ihre Eingabe. Ich werde diese Lösung prüfen, sobald ich einen Moment Zeit habe. Ich melde mich bald wieder.
Xoundboy
6

Überprüfen Sie dieses Skript . Es prüft anhand einer Liste von Websites und sendet E-Mails (zur Liste der E-Mails), wenn etwas nicht stimmt (die http-Antwort unterscheidet sich von 200). Das Skript erstellt eine temporäre Datei, um sich zu merken, welche Website (n) bei der letzten Überprüfung fehlgeschlagen sind, damit Sie nicht mehrere E-Mails erhalten. Die temporäre Datei wird gelöscht, wenn die Website wieder funktioniert.

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

Fügen Sie die folgenden Zeilen zu crontab config hinzu ($ crontab -e)

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

Erhältlich bei Github

ET-CS
quelle
2

Ich weiß, dass alle oben genannten Skripte genau das sind, wonach Sie gefragt haben, aber ich würde empfehlen, sich monit anzuschauen, da es Ihnen eine E-Mail sendet, wenn Apache nicht verfügbar ist, aber es auch neu startet (falls es nicht verfügbar ist).

Jure1873
quelle
Das sieht auch interessant aus - ich werde versuchen, Zeit zu finden, es bald zu überprüfen und meine Erkenntnisse zurückzusenden.
Xoundboy
1

Ich würde Pingdom dafür empfehlen. Mit ihrem kostenlosen Service können Sie 1 Site überprüfen, aber das ist alles, was Sie brauchen, um 1 Server zu überprüfen. Wenn Sie über ein iPhone verfügen, erhalten Sie eine kostenlose Push-Nachricht, sodass Sie keine SMS-Guthaben erwerben müssen. Außerdem stehen Ihnen mehrere Einstellungen zur Verfügung. Meins soll mich nach 2 Wiederholungsversuchen (10 Minuten) und danach alle 10 Minuten Ausfallzeit benachrichtigen. Es ist fantastisch, da es auch nach HTTP 500-Nachrichten sucht, die darauf hinweisen, dass eine Site nicht erreichbar ist. Wenn dies fehlschlägt, wird Ihre Site sofort von einem anderen Server an einem anderen Standort erneut überprüft. Wenn dies fehlschlägt, können Sie festlegen, wie und wann Sie benachrichtigt werden möchten.

AcidRaZor
quelle
Ich mag diesen Pingdom-Dienst wirklich sehr. Richten Sie einfach das kostenlose Konto ein und testen Sie den Scheck und die SMS an meine tschechische Handynummer.
Xoundboy
Leider scheint Pingdom die kostenlose Stufe nicht mehr anzubieten. Der günstigste Tarif beträgt 14,95 USD / Monat.
Ben Johnson
Sie können cronitor.io verwenden - sie bieten eine kostenlose Website zum Überprüfen an und können Benachrichtigungen per Push an E-Mail, Slack oder einen anderen Webhook senden.
Riz
Eine andere Alternative zu Pingdom wäre Uptimerobot , 5 Minuten Überwachungsintervalle und 50 überwachte Websites im kostenlosen Plan. Es lässt sich problemlos in Slack und Telegramm integrieren (außer Push-, SMS- oder E-Mail-Benachrichtigung, ...).
trolologuy
1

Leichte Abweichung von den oben genannten.

Ein Skript, mit dem alle 10 Sekunden überprüft wird, ob eine Website verfügbar ist. Protokollieren Sie fehlgeschlagene Versuche in einer siteuptime.txtDatei, damit sie später angezeigt (oder in Excel grafisch dargestellt) werden kann.

#!/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;
dtbaker
quelle
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: [email protected]" 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: [email protected]" 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: [email protected]" 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
shahid shaik
quelle
0

Da Ihr VPS viele Websites enthält, würde ich Ihnen empfehlen, ein Konto bei einer Website-Überwachungssite wie host-tracker.com zu eröffnen. Abgesehen davon, dass Sie benachrichtigt werden, ob die Website nicht verfügbar ist oder nicht, werden Ihnen auch wöchentliche, monatliche und jährliche Betriebszeiten Ihrer Websites angezeigt. Whish ist sehr hilfreich für die Verwaltung und Leistung.

Alok
quelle
0

Wie wäre es damit:

#!/bin/bash
/etc/init.d/httpd status
if [[ $? == 3 ]]; then
   echo "Httpd is down `date`" | mail support@example.com
   exit 1
fi
exit 0
frogstarr78
quelle
1
Ich mag die Einfachheit, aber das wird nicht testen, ob die Website über das Internet verfügbar ist. Der Dienst könnte ausgeführt werden, aber tatsächlich keine Clients bedienen. Ich bin schon einmal darauf hereingefallen.
John Gardeniers
2
Einverstanden, obwohl, wenn Sie sicherstellen möchten, dass es über das Internet zugänglich ist, müssen Sie es über das Internet testen. Sogar das Ausführen von wget auf dem Server zu seiner externen Netzwerkschnittstelle wäre kein genauer Test, dass das Internet darauf zugreifen kann.
Frogstarr78