
Блог переехал на https://shapkin.me
Вот и в моей жизни настал такой момент :smile: Итак, ниже код скрипта с простыми пояснениями:
#!/bin/bash
ping="ping -c 4 -s 1 -W 1"
mailcmd=$(which mail)
mailaddr="yourmailaddress@mail.com"
HOSTS="domain.com n1.domain.com n2.domain.com"
msg="$(pwd)/ping.$$"
send_mail(){
$mailcmd -s "Проверка сервера $hst" $mailaddr < $msg
}
for hst in $HOSTS
do
count=$($ping $hst|grep "received"|awk -F',' '{ print $2 }'|awk '{ print $1 }')
if [[ $count -eq 0 ]]; then
echo "$(date '+%d %b %H:%M:%S'): Сервер $hst не пингуется! " >> $msg
fi
done
send_mail
sleep 1
rm -f $msg
Алгоритм работы следующий:
Берем список доменов и попеременно пингуем каждый из них. Если хоть один не пингуется - заносим информацию об этом во временный файл и, после того, как все проверки отработали - отсылаем письмо.
Теперь рассмотрим конкретнее:
ping
-c указываем кол-во пакетов
-s указываем размер пакета
-W указываем лимит для timeout'а
HOSTS
Тут перечисляем все необходимые нам сервера, домены и/или айпишники.
msg
Обозначаем место сохранения временного лога, соответственно лог будет лежать в той же директории, откуда запускается скрипт.
Проверка
Самое главное начинается :)
Цикл for перебирает наши сервера по списку и подставляет по очереди в скрипт, где идет пинг по заданным параметрам, затем грепаем по выражению received (нас же интересуют потери пакетов) и после передаем найденную строку на парсинг awk'у, который сперва выбирает 2-ое выражение, а потом из него же - 1-ое.
4 packets transmitted, 4 received, 0% packet loss, time 3208msПеред тем, как начать выборку, мы указали, что выражения разделены запятыми « awk -F',' ». Теперь мы проверяем, что кол-во пакетов (результат всей выборки будет заноситься в переменную count) не равно 0, ну а если такое случится - заносим данные в лог. После того, как все сервера прогоняются, мы получаем окончательно сформированный лог, который и отсылается нам на почту, в случае надобности. Соответственно, если все сервера пингуются и поле received не равно 0, письмо не приходит, а значит все работает как часы(не факт конечно, но мы сейчас исключительно про сетевую доступность наших машин). Ну и после отправки письма, делаем паузу в 1 секунду и удаляем наш лог. Этот скрипт безусловно не претендует на уникальность, но от лишних забот избавляет :)
Комментариев нет:
Отправить комментарий