Совсем недавно встала задача проверять доступность определённого списка узлов сети в конкретный момент времени и отсылать результаты на почту, данная задача была вызвана тем что в компании где я являюсь админом на данный момент более сотни разбросанных по всей нашей Родине магазинов, которые представляют из себя собственную подсеть с маршрутизатором входящим в MPLS сетку или поднимающим отдельный VPN для подключения к центральному маршрутизатору. Так как приходится работать в различных условиях и с различными провайдерами, нет ни какой уверенности что определённые процедуры отгрузки данных, которые запускаются в конкретный промежуток времени отработают и не отвалятся из-за отсутствия канала. Именно по этому было решено пинговать их скриптом и список не ответивших хостов высылать на почту ответственных за данный сервис сотрудников
Итак приступим. Что у нас есть - список IP адресов и название узлов сети (не будем же мы просто рассылать кучу никому не понятных адресов без внятного названия), что нам требуется- проверить их доступность и отправить список не отвечающих.
Идём на сервер и создаём свой скрипт в каталоге /usr/sbin чтобы потом не вводить полный путь при запуске скрипта из консоли
cd /usr/sbin touch pinger.sh
Так как скрипт у нас должен быть исполняемым выставляем на него определённые права
chmod 775 pinger.sh
Обратите внимание- всё это мы проделываем под учётной записью root и в директории расположения скрипта!
Теперь приступаем к созданию самого скрипта:
mcedit pinger.sh
Копируем ниже представленный листинг скрипта и вставляем в ваш файл
#!/bin/bash # ping IP list export LANG=ru_RU.UTF-8 export LANGUAGE=ru export LC_CTYPE=ru_RU.UTF-8 if [ ! -e ~Administrator/pinger/iplist.txt ]; then echo '/home/Administrator/pinger/iplist.txt nnnada!!!' echo 'Zapili mne iplist.txt' exit fi ERRIP=0 ALIVE=0 SUMIP=0 touch /tmp/pinger/noansw.txt IPLST=`cat ~Administrator/pinger/iplist.txt` for IP in $IPLST; do export SUMIP=`expr $SUMIP + 1` if ping -c1 $IP > /dev/null then export ALIVE=`expr $ALIVE + 1` awk '/'$IP'/ {print}' ~Administrator/pinger/namelist.txt >> /tmp/pinger/answ.txt else export ERRIP=`expr $ERRIP + 1` awk '/'$IP'/ {print}'~Administrator/pinger/namelist.txt >>/tmp/pinger/noansw.txt fi done DATA=`date +%x-%H:%M` echo $DATA ниже перечисленные объекты остались без связи >> /tmp/pinger/mail_body echo _________________________________________ >> /tmp/pinger/mail_body cat /tmp/pinger/noansw.txt >> /tmp/pinger/mail_body echo _________________________________________ >> /tmp/pinger/mail_body echo с уважением ваш Робот Бендер >> /tmp/pinger/mail_body cat /tmp/pinger/mail_body | mail -i -s "Test communication with shops" ваша@почта.ру rm -f /tmp/pinger/mail_body rm -f /tmp/pinger/noansw.txt rm -f tmp/pinger/answ.txtОбратите внимание на некоторые строки скрипта, они скорее всего будут отличаться так как в моём случае скрипт работает с файлами iplist.txt и namelist.txt которые расположены в папке pinger домашнего каталога пользователя Administrator и почтовый ящик ваша@почта.ру вам тоже стоит поменять на свой :)
Итак создаём все необходимые для работы скрипта папки и файлы
mkdir ~Administrator/pinger cd ~Administrator/pinger touch iplist.txt touch namelist.txt chmod -R 775 /home/Administrator/pinger mkdir /tmp/pinger chmod 777 /tmp/pinger
и приводим файлы iplist.txt и namelist.txt вот к такому виду
192.168.1.1 192.168.2.1 192.168.3.1
192.168.1.1 Обеъкт номер 1 192.168.2.1 Обеъкт номер 2 192.168.3.1 Обеъкт номер 3
Теперь создадим задание в Cron которое будет выполняться ежедневно, допустим, в 22:00 записывая логи выполнения в файл /var/log/pinger_error.log
# открываем редактирование crontab crontab -e i # вводим строчку задания и незабываем о пустой строке после неё! #завершаем редактирование нажатием Esc #записываем изменения и выходим :wq
Наш скрипт будет брать построчно ip адреса из iplist.txt пинговать их сравнивая значение адреса со списком namelist.txt и отправлять полученные значения на указанную почту. Для работы скрипта в системе должен быть установлен либо почтовый сервер либо MTA и пакет mailx (почти во всех дистрибутивах Linux присутствует в дистрибутиве) но это уже совсем другая история.
Данный скрипт далеко не идеален так как был написан за 15 минут и будет со временем дорабатываться в рамках обновления данной статьи
Комментариев нет :
Отправить комментарий