net


[ Пред. ] [ Содержание ] [ След. ]

net



http://www.f-notes.info/linux:check_channel
Автоматизация проверки доступности сети

Друг попросил помочь решить проблему с автоматизацией проверки доступности подсети.
Суть проверки сводилась к тому, что с одного хоста, выступающего в качестве организатора vpn с подсетью
предприятия, обычным пингом проверялся заведомо рабочий хост из сети предприятия. Надо было это
автоматизировать, а в случае отсутствия доступа к сети, в данном конкретном случае, надо было
рестартануть pptpd.
Решение выглядит так:
#!/bin/bash
#ip="25.54.97.18"
ip="$1"
count=3
attempt=3
file="./time"
DMHM=`date +%d.%m.%H\:%M`
result=$(ping -c ${count} ${ip} | tail -2 | head -1 | awk '{print $4}')
if [ $result -eq 0 ]; then
if [ -f ${file} ]; then
f=$(cat ${file} | tail -1| head -1| awk '{print $1}')
if [ ${f} -eq ${attempt} ]; then
rm ${file}
/etc/init.d/pptpd restart
else
att=$(expr ${f} + 1)
fi else
att=1 fi
if [ ! -z ${att} ]; then
echo ${att} $DMHM >> ${file} fi
else
if [ -f ${file} ]; then
rm ${file} fi
fi

Что делает этот скрипт? Рассмотрим подробнее:
Переменные:
"ip" - ip-адрес хоста, который будем пинговать
"count" - количество пакетов, отсылаемых ping'ом
"attempt" - количество безуспешных попыток "достучаться" до хоста
"file" - полное имя файла, в котором будет храниться количество безуспешных попыток
"result" - количество пакетов, прошедших в результате выполнения ping
Логика:
"$result -eq 0" - если не вернулось ни одного пакета, значит, связи нет и надо это дело обработать:
"-f ${file}" - файл есть (не впервые обнаруживаем отсутствие связи), считаем значение количества попыток из файла ("f=$(cat ${file})"):
Если количество попыток ещё не равно заданному допустимому значению, увеличиваем количество попыток и значение помещаем в переменную ("att=$(expr ${f} + 1)");
Если количество попыток уже равно заданному допустимому значению ("${f} -eq ${attempt}"), удаляем файл и выполняем необходимую команду или скрипт ("/etc/init.d/pptpd restart");
Если файла нет (значит это первая попытка обнаружившая пропажу связи), поместим значение "1" в переменную для использования в дальнейшем и будем знать, что один раз уже было :)
Если есть хоть какое-то непустое значение переменной ("! -z ${att}"), поместим его в файл ("echo ${att} > ${file}")
если связь есть или она появилась с момента последней проверки и присутствует файл, файл надо удалить

Содержание