Pull to refresh

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

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

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

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

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

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

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

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

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



С алгоритмом разобрались. Пробежимся по основным и наиболее интересным командам.
Функция получения статуса канала (пинг канала), в случае успеха вернет 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";

Ну а полный код данного скрипта, можно взять здесь.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.