2013-08-15 2 views
4

Является ли этот инструмент, который я создал из различных потоков SOF, действителен? Это будет работать? Я хочу каждую минуту проверять ping-тест на сервер. Если он не работает 5 раз подряд, он отправляет сообщение по электронной почте. Затем он сбрасывает и сбрасывает сценарий в значительной степени, чтобы снова проверить его.Ping Tool, чтобы проверить, находится ли сервер в сети

#!/bin/bash 
# ping checker tool 

numOfFails=0 
incrememnt=1 
EMAILMESSAGE="/tmp/emailmessage.txt" 

while true; do 
    if ! ping -c 1 google.com ; then #if ping exits nonzero... 
     numOfFails=$(($num + $increment)) 
    else 
     numOfFails=0 
    fi 
    if ((numOfFails > 4)); then 
     numOfFails=0 
     echo "SAN is offline!" > $EMAILMESSAGE 
     mail -s "SAN offline" "[email protected]" < $EMAILMESSAGE 
    fi 
    sleep 60 #check again in one minute 
done 
+4

' если numOfFails> 4; 'должно быть, должно быть' if ((numOfFails> 4)); затем 'для начала. И '' 'если! ["' ping -c 1 google.com']]; то '' ', вероятно,' если! ping -c 1 google.com; then' – user000001

+0

@ user000001 вы должны предложить это в качестве ответа, а также указать, что он не считается 5 в строке, всего 5. –

+0

@thatotherguy Вот почему я добавил его в качестве комментария.Я не подтвердил все это ... :) – user000001

ответ

5

Ваш код не будет работать вообще, это пересмотренная версия:

#!/bin/bash 
# ping checker tool 

FAILS=0 
EMAIL_ADDRESS="[email protected]" 
SERVER="192.168.1.1" 
SLEEP=60 

while true; do 
    ping -c 1 $SERVER >/dev/null 2>&1 
    if [ $? -ne 0 ] ; then #if ping exits nonzero... 
     FAILS=$[FAILS + 1] 
    else 
     FAILS=0 
    fi 
    if [ $FAILS -gt 4 ]; then 
     FAILS=0 
     echo "Server $SERVER is offline!" \ 
      | mail -s "Server offline" "$EMAIL_ADDRESS" 
    fi 
    sleep $SLEEP #check again in SLEEP seconds 
done 

Изменение [email protected] и 192.168.1.1 ваш адрес электронной почты и IP-адрес сервера, который вы проверяете. Я рекомендую использовать и IP-адрес вместо имени хоста, чтобы предотвратить смешивание ошибок разрешения имен с ошибками соединения.

Обратите внимание, что хотя это будет работать, я рекомендовал бы запустить немного другой скрипт из cron вместо того, чтобы он работал непрерывно, как вам кажется, при запуске cron вам не нужно будет следить за тем, чтобы сценарий работал с если он по какой-то причине останавливается, мониторинг сервера также прекращается.

Что-то вроде этого бежит от crontab каждую минуту.

#!/bin/bash 
# ping checker tool 

TMP_FILE="/tmp/ping_checker_tool.tmp" 
if [ -r $TMP_FILE ]; then 
    FAILS=`cat $TMP_FILE` 
else 
    FAILS=0 
fi 
EMAIL_ADDRESS="[email protected]" 
SERVER="192.168.1.1" 

ping -c 1 $SERVER >/dev/null 2>&1 
if [ $? -ne 0 ] ; then #if ping exits nonzero... 
    FAILS=$[FAILS + 1] 
else 
    FAILS=0 
fi 
if [ $FAILS -gt 4 ]; then 
    FAILS=0 
    echo "Server $SERVER is offline!" \ 
     | mail -s "Server offline" "$EMAIL_ADDRESS" 
fi 
echo $FAILS > $TMP_FILE 
0

Рассмотрите возможность использования Pingdom. Он предоставляет вам эту услугу.

Одна вещь, которую вы не учли, сразу после того, как ваш сайт опустится, вы будете получать сообщения электронной почты каждую минуту, пока сайт не будет снова включен, или пока вы не остановите этот сценарий.

Хороший подход заключается в том, чтобы переключать состояния от отчетов, когда сайт не сообщает о том, когда сайт встал, как только вы обнаружили, что он не работает. И затем снова, когда он будет обратно.

По существу, вы получаете сообщение об отправке сообщений по электронной почте, а затем еще один, надеюсь, сообщают, что сайт «вверх».

Pingdom делает это за вас, очень красиво.

0

Я изучал, как это сделать, чтобы активировать/деактивировать службы в зависимости от того, находится ли у меня домашний телефон. Я пришел со следующими:

#!/bin/bash 

HOST_TO_CHECK=<hostname> 

if ping -qc 20 $HOST_TO_CHECK >/dev/null; then 
    echo "Host $HOST_TO_CHECK is up" 
else 
    echo "Host $HOST_TO_CHECK is down" 
fi 

Заменить < имя хоста > с хозяином, который вы хотите проверить.

Сценарий будет пинговать хост 20 раз. Причина этого в том, что мой мобильный телефон не всегда отвечает на звонки сразу.

Очевидно, что вы можете заменить эхо команд с чем-то на самом деле сделать что-то полезное :-)

Вы можете планировать сценарий проверять каждые 5 минут, добавив его в кронтаб:

*/5 * * * * /opt/pingcheck.sh