пятница, 17 января 2014 г.

bash скрипт пингующий список ip адресов

Совсем недавно встала задача проверять доступность определённого списка узлов сети в конкретный момент времени и отсылать результаты на почту, данная задача была вызвана тем что в компании где я являюсь админом на данный момент более сотни разбросанных по всей нашей Родине магазинов, которые представляют из себя собственную подсеть с маршрутизатором входящим в 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 минут и будет со временем дорабатываться в рамках обновления данной статьи

Комментариев нет :

Отправка комментария

Яндекс.Метрика