Инструменты пользователя

Инструменты сайта


mikrotik:rb3011uias:routeros:system:scripts:failover

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
mikrotik:rb3011uias:routeros:system:scripts:failover [2020/10/11 17:41]
Николай Солошин [Проверка резервного канала]
mikrotik:rb3011uias:routeros:system:scripts:failover [2022/02/12 11:40] (текущий)
Строка 230: Строка 230:
  
 ==== Основная часть скрипта ==== ==== Основная часть скрипта ====
 +
 +Собственно, отсюда она только начинается. До этого были цветочки. 8-O
  
 <code>/ip route { <code>/ip route {
Строка 235: Строка 237:
   :set ether2Route [find dst-address="0.0.0.0/0" gateway=$gateway2ip];</code>   :set ether2Route [find dst-address="0.0.0.0/0" gateway=$gateway2ip];</code>
  
-==== Тексты писем ====+=== Тексты писем === 
 + 
 +Тут вводится текст для сотрудников, который сообщает им в каком состоянии находится Интернет. 
 + 
 +Для удобства он разбит на 4 фрагмента - заголовок, текст при переходе на резервный канал, текст при переходе на основной канал и подпись.
  
-# Text strings used in the email to employees on the mailing list.+Для переноса строк можно использовать ''\r\n''. Кириллица тоже поддерживается, но вводить текст нужно непосредственно в редакторе скриптов WinBox, т.к. у MikroTik'а с этим есть определенные сложности.
  
 <code>  :local eventHeader "Header,"; <code>  :local eventHeader "Header,";
Строка 243: Строка 249:
   :local eventTextPrimary "Text\r\nPrimary";   :local eventTextPrimary "Text\r\nPrimary";
   :local eventSign "Sign";</code>   :local eventSign "Sign";</code>
 +
 +А тут формируется итоговое письмо и тема, которая будет состоять из пояснительного текста и временной метки. Опять же, текст темы можно писать на русском.
  
 <code>  :local dateTime ([/system clock get date]."@".[/system clock get time]); <code>  :local dateTime ([/system clock get date]."@".[/system clock get time]);
Строка 249: Строка 257:
   :local eventPrimary "$eventHeader\r\n\r\n$eventTextPrimary\r\n\r\n$eventSign";   :local eventPrimary "$eventHeader\r\n\r\n$eventTextPrimary\r\n\r\n$eventSign";
   :local eventBackup "$eventHeader\r\n\r\n$eventTextBackup\r\n\r\n$eventSign";</code>   :local eventBackup "$eventHeader\r\n\r\n$eventTextBackup\r\n\r\n$eventSign";</code>
 +
 +== Пример письма ==
  
 {{:mikrotik:rb3011uias:routeros:system:scripts:mail-sample.png?nolink|}} {{:mikrotik:rb3011uias:routeros:system:scripts:mail-sample.png?nolink|}}
-==== Корректировка маршрутов ====+ 
 +=== Подготовка маршрутов === 
 + 
 +Проверка и, при необходимости, корректировка обоих маршрутов. Для удобства, основной канал имеет дистанцию ''2'', а резервный ''3''. При переходе на резервный канал меняется только дистанция у маршрута этого канала - с ''3'' на ''1''.
  
 <code>  :if ( [get $ether1Route distance] != 2 ) do={ <code>  :if ( [get $ether1Route distance] != 2 ) do={
     set $ether1Route distance=2;     set $ether1Route distance=2;
     :log warning ("Distance for " . $ether1Name . " corrected!");     :log warning ("Distance for " . $ether1Name . " corrected!");
-  }</code>+  }
  
-<code>  :if ( [get $ether2Route distance] != 1 && [get $ether2Route distance] != 3 ) do={+  :if ( [get $ether2Route distance] != 1 && [get $ether2Route distance] != 3 ) do={
     set $ether2Route distance=3;     set $ether2Route distance=3;
     :log warning ("Distance for " . $ether2Name . " corrected!");     :log warning ("Distance for " . $ether2Name . " corrected!");
   }</code>   }</code>
  
-==== Проверка основного канала ====+=== Проверка основного канала === 
 + 
 +Вызываем функцию для проверки основного канала.
  
 <code>:local pingStatus [ $pingSession pingFrom=$ether1Name; ];</code> <code>:local pingStatus [ $pingSession pingFrom=$ether1Name; ];</code>
 +
 +Вот наконец и самая суть скрипта. Если ''pingStatus'' меньше ''stableConnect'' проверяем, первый ли это раз. Если первый, то просто предупреждаем администратора и выставляем метку ''pastCheckStatus'' в значение ''false''. Если не первый, т.е. ''pastCheckStatus'' уже равно ''false'', то переключаем канал на резервный, пишем в лог, уведомляем сотрудников и отключаем гостевую Wi-Fi сеть.
 +
 +Если ''pingStatus'' не меньше ''stableConnect'', значит основной канал работает нормально и можно переключиться обратно на него. В этом случае переключаем канал, меняя дистанцию резервного канала на ''3'', пишем в лог и всех уведомляем. Все!
  
 <code>  :if ( $pingStatus < $stableConnect ) do={ <code>  :if ( $pingStatus < $stableConnect ) do={
Строка 300: Строка 319:
       }       }
 }</code> }</code>
 +
 +И напоследок меняем значение переменной ''failoverRun'' на ''false'', [[#проверка_двойного_запуска|уведомляя другие копии]] этого скрипта о том, что текущий скрипт завершился и можно занимать его место. LOL
  
 <code>:set failoverRun false;</code> <code>:set failoverRun false;</code>
Строка 305: Строка 326:
 ===== Код для импорта ===== ===== Код для импорта =====
  
-<file rsc failover.rsc>add comment="\D2\E5\F1\F2\E8\F0\EE\E2\E0\ED\E8\E5 \E8\ED\F2\E5\F0\ED\E5\F2 \EA\+<file rsc failover.rsc>/system script 
 +add comment="\D2\E5\F1\F2\E8\F0\EE\E2\E0\ED\E8\E5 \E8\ED\F2\E5\F0\ED\E5\F2 \EA\
     \E0\ED\E0\EB\EE\E2 \E8 \EF\E5\F0\E5\EA\EB\FE\F7\E5\ED\E8\E5 \ED\E0 \F0\E5\     \E0\ED\E0\EB\EE\E2 \E8 \EF\E5\F0\E5\EA\EB\FE\F7\E5\ED\E8\E5 \ED\E0 \F0\E5\
     \E7\E5\F0\E2\ED\FB\E9" dont-require-permissions=no name=script1 owner=\     \E7\E5\F0\E2\ED\FB\E9" dont-require-permissions=no name=script1 owner=\
Последнее изменение: 2022/02/12 11:40 (внешнее изменение)