Документ создан: 11.02.2010

Автоматизация проверки доступности сети

Друг попросил помочь решить проблему с автоматизацией проверки доступности подсети.

Суть проверки сводилась к тому, что с одного хоста, выступающего в качестве организатора vpn с подсетью предприятия, обычным пингом проверялся заведомо рабочий хост из сети предприятия. Надо было это автоматизировать, а в случае отсутствия доступа к сети, в данном конкретном случае, надо было рестартануть pptpd.

Решение выглядит так:

#!/bin/bash

ip="192.168.4.254"
count=3
attempt=3
file="./time"

result=$(ping -c ${count} ${ip} | tail -2 | head -1 | awk '{print $4}')

if [ $result -eq 0 ]; then
  if [ -f ${file} ]; then
    f=$(cat ${file})
    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} > ${file}
  fi
else
  if [ -f ${file} ]; then
    rm ${file}
  fi
fi

Что делает этот скрипт? Рассмотрим подробнее:

  1. Переменные:
    • "ip" - ip-адрес хоста, который будем пинговать
    • "count" - количество пакетов, отсылаемых ping'ом
    • "attempt" - количество безуспешных попыток "достучаться" до хоста
    • "file" - полное имя файла, в котором будет храниться количество безуспешных попыток
    • "result" - количество пакетов, прошедших в результате выполнения ping
  2. Логика:
    1. "$result -eq 0" - если не вернулось ни одного пакета, значит, связи нет и надо это дело обработать:
      1. "-f ${file}" - файл есть (не впервые обнаруживаем отсутствие связи), считаем значение количества попыток из файла ("f=$(cat ${file})"):
        1. Если количество попыток ещё не равно заданному допустимому значению, увеличиваем количество попыток и значение помещаем в переменную ("att=$(expr ${f} + 1)");
        2. Если количество попыток уже равно заданному допустимому значению ("${f} -eq ${attempt}"), удаляем файл и выполняем необходимую команду или скрипт ("/etc/init.d/pptpd restart");
      2. Если файла нет (значит это первая попытка обнаружившая пропажу связи), поместим значение "1" в переменную для использования в дальнейшем и будем знать, что один раз уже было :)
      3. Если есть хоть какое-то непустое значение переменной ("! -z ${att}"), поместим его в файл ("echo ${att} > ${file}")
    2. если связь есть или она появилась с момента последней проверки и присутствует файл, файл надо удалить
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate