Ротация каналов связи

в 16:03, , рубрики: Настройка Linux, Разработка под Linux

Доброго дня!
Недавно столкнулся с задачей ротации каналов связи, суть в том, что есть основной канал связи, есть резервный. Реальная задача, из реальной жизни, а так навеяло студенческими годами.

Приступим к делу? Задача реализовать переключение канала связи на резервный, при падении основного канала. Но при этом всем необходимо учесть возможность возврата к основному каналу (при его восстановлении).

Как говорится, глаза бояться, руки делают.

В основу метода лег стек. Скрипт запускается по Крону с заданным интервалом времени (у нас это 1 минута). При каждом запуске в определенный файл (пусть это будет file.txt), в его конец, добавляется состояние основного канала.

Условно: 1 — работает, 0-не работает.

Чтобы не раздувать наш файл, оставим в файле последние пять состояний, все остальные удалим (по факту будет удаляться одно первое состояние).

Чтобы не мучить пользователя постоянными переключениями каналов, принимаем за правило: переключать канал, только в том случае, когда ошибка повторилась 5 раз подряд.

Вот уже вырисовывается алгоритм (простите, я принадлежу клану староверов, то этому и алгоритм рисую прежним стандартом).

Ротация каналов связи - 1

С алгоритмом разобрались. Пробежимся по основным и наиболее интересным командам.
Функция получения статуса канала (пинг канала), в случае успеха вернет 1, иначе 0

function pingrun
{
STATUS=`ping $1 -c 1 -w 2 | grep " 1 received"`
if [[ -z "$STATUS" ]]; then
  echo 0
else
  echo 1
fi
}

Для удаления верхней строки файла используйте следующий код

tail -n -6 "$filename" > "$filename.tmp" && mv "$filename.tmp" "$filename";

Ну а полный код данного скрипта, можно взять здесь.

Автор: человек со стажем

Источник

Поделиться

* - обязательные к заполнению поля