Автор Тема: Скрипт для проверки серверов на ping  (Прочитано 1696 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Green

  • Администратор
  • *****
  • Сообщений: 475
  • Карма: 18
  • Пол: Мужской
    • Просмотр профиля
    • Свободный Linux форум
Скрипт для проверки серверов на ping
« : 13 Октябрь 2008, 21:21:41 »
Автор скрипта nekr0z (nekr0z@mail.ru)
Идея и постановка задачи - Lorgus (alex@tcp.ru)

#!/bin/bash
# Скрипт для проверки состояния серверов, версия 1.0.1
# (c) nekr0z (nekr0z@mail.ru), 2008
# Идея и постановка задачи - Lorgus (alex@tcp.ru)
# Скрипт публикуется под лицензией GPL

# ВНИМАНИЕ:
# Скрипт при работе довольно интенсивно выводит информацию в консоль.
# При запуске рекомендуется перенаправлять вывод в лог (если это интересно)
# или (если неинтересно) - в /dev/null

# Проверка состояния серверов производится ping’ом.
# Если сервер отвечает на ping, он считается живым (хотя это не всегда так).
# Соответственно, не отзывающийся на ping сервер считается мёртвым (хотя это тоже не всегда так).

######################################################################
######### НАСТРОЙКИ ##################################################

# E-mail админа:
MAIL_ADDR=”nekr0z@localhost nekr0z@mail.ru” # можно отправлять сразу нескольким, разделив адреса пробелами

# Subject писем:
MAIL_SUBJ=”New state of servers”

# Список серверов для проверки;
# каждый - отдельной строкой вида:
# SERVER[n]=”адрес или IP”
SERVER[1]=”192.168.0.1″
SERVER
[2]=”192.168.0.2″
SERVER
[3]=”mail.ru”

######################################################################
######################################################################

# Предполагаем, что все сервера изначально живы.
for i in `seq 1 ${#SERVER[@]}`; do
SERVER_STATE[$i]=3    # В массиве $SERVER_STATE хранятся состояния серверов, а именно:
# 0 - мёртвый, 1 - только что умер,
# 2 - ожил, 3 - живой.
done

# Начинаем работать.
while true
do

# Проверяем все сервера.
echo Checking servers…
for i in `seq 1 ${#SERVER[@]}`; do
echo Server ${SERVER[$i]}
if [[ `
ping ${SERVER[$i]} -w 1 | grep “0 received”` = “” ]]; then
# Сервер жив…
echo looks alive
if [[ ${SERVER_STATE[$i]} > ]]; then
# и был жив.
SERVER_STATE[$i]=3
else
# ожил.
SERVER_STATE[$i]=2
fi
else
# Сервер мёртв…
echo looks dead
if [[ ${SERVER_STATE[$i]} > ]]; then
# только что умер.
SERVER_STATE[$i]=1
else
# давно мёртв.
SERVER_STATE[$i]=0
fi
fi
done

# Пауза перед повторной проверкой:
sleep 10;

# Повторная проверка умерших серверов:
echo Checking servers gone dead…
for i in `seq 1 ${#SERVER[@]}`; do
if [[ ${SERVER_STATE[$i]} = ]]; then
echo Server ${SERVER[$i]}
if [[ `
ping ${SERVER[$i]} -w 1 | grep “0 received”` = “” ]]; then
# оказывается, живой!
echo appears to be alive
SERVER_STATE
[$i]=3
else
# таки умер.
echo has really gone dead
SERVER_STATE
[$i]=1
fi
fi
done

# Составляем отчёты:
for i in `seq 1 ${#SERVER[@]}`; do
if [[ ${SERVER_STATE[$i]} = ]]; then
# server gone dead
GONE_DEAD=$GONE_DEAD” “${SERVER[$i]}
fi
if [[ ${SERVER_STATE[$i]} = ]]; then
# server gone alive
GONE_ALIVE=$GONE_ALIVE” “${SERVER[$i]}
fi
done
if [[ $GONE_DEAD != "" ]]; then
MESSAGE
=”DEAD“$GONE_DEAD
fi
if [[ $GONE_ALIVE != "" ]]; then
MESSAGE
=$MESSAGE”   NOW ALIVE“$GONE_ALIVE
fi

# Сообщаем админу:
if [[ $MESSAGE != "" ]]; then
echo $MESSAGE
echo $MESSAGE mail -s “$MAIL_SUBJ” “$MAIL_ADDR”
echo Mailed!
fi
echo
echo
echo

# Обнуляем отчёты и отдыхаем до следующей проверки:
GONE_DEAD="
GONE_ALIVE=”"
MESSAGE="
sleep 50;
done

##########################################################
# История изменений:
#
# 1.0 - исходная версия
#
# 1.0.1 - пофиксил обращение с subject и адресатом письма, теперь в subj можно ставить пробелы,
#        а адресатов может быть несколько.
Сохраните визитку
Paste Pro — удобный pastebin
IRC: server => irc.freenode.net  channel => #linuxtalks