Скрипт отправки сообщения при падении интерфейса...

Обсуждение ПО и его настройки
Аватара пользователя
Dragon_Knight
Сообщения: 1724
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Наконец-то у меня появился модем E367 и я с радостью стал с ним играться...
Конечно не сразу, но завёл его, причём на 2011RM он вообще не определялся, даже как USB устройство, хотя флешка определялась, но в CCR1009 сразу всё завелось с первой попытки, но это другая история, в которой нужно разбираться....

Собственно сейчас очень хочется реализовать SMS оповещения, но вот в скриптовом языке я совершенно не способен разобраться... На любом языке я смогу реализовать такую задачу за 5 минут, а вот в микротике......
Собственно задача.
Сделать оповещение при падении WAN-PPPoE интерфейса, путём отправки сообщения на мой номер, но с некоторыми оговорками:
* Падение интерфейса в промежуток времени с 5:45 до 6:00 не учитывать (перезагрузка оборудования у провайдера);
* Исключить из оповещение... как сказать.. jitter? когда подключения периодически падает и поднимается (например если пропало подключение, то мы отправляем сообщение, и если в течении 60 минут будут ещё падения, то мы их игнорируем, или после падения отправляем SMS и ждём, пока подключение стабильно не проработает в течении 60 минут, если проработало и упало, то отправляем новое SMS, если прошло меньше 60 минут, то игнорируем);
* Проверять как падение PPPoE так и потерю пинга в мир;
* Отправлять сообщение при поднятии интерфейса и появлению доступа в мир;
* Вызывать другой скрип, который будет переконфигурировать фаервол, NAT, QoS и маршруты;

Помогите реализовать такой скрип, или натолкните на путь истинный толковыми инструкциями, хотя сколько я не пытался понять как он работает, - всё равно это какая-то магия для меня :)


Небольшой свод правил логики и ссылок:
  1. Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
  2. Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
  3. Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
  4. Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
  5. Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
  6. name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
  7. Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
  8. Мой сайт по Mikrotik: Global Zone >> MikroTik.
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

А хоть что-то уже начато? Давай, бери за основу например viewtopic.php?p=18297#p18297 Переписывать конечно много, но саму мысль уловить несложно. Где споткнешься, пиши, будем поправлять


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
Dragon_Knight
Сообщения: 1724
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

В том и дело что нету ничего. Когда пытаюсь понять что тут написано: http://wiki.mikrotik.com/wiki/Manual:Scripting забываю вообще что я тут делаю...
Даже не представляю как получить состояние интерфейса.... :-(


Небольшой свод правил логики и ссылок:
  1. Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
  2. Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
  3. Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
  4. Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
  5. Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
  6. name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
  7. Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
  8. Мой сайт по Mikrotik: Global Zone >> MikroTik.
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Good. Давай начинать. Предположим, что мы пингуем три внешних адреса для определения работоспособности канала:

Код: Выделить всё

:local PingCount 3
:local google 8.8.8.8
:local yandex 77.88.8.8
:local mail  94.100.180.201
:local ResultGoogle [/ping count=$PingCount $Google interface=WAN]
:local Resultyandex [/ping count=$PingCount $yandex interface=WAN]
:local ResultMail [/ping count=$PingCount $mail interface=WAN]

Далее, назначим переменную и предположим, что она имеет значение "ложно". Теперь исправим значение этой переменной, проверив утверждение (суммарный результат ответов на запросы не менее 6). Подставляем в равенство :

Код: Выделить всё

:local MainIfInetOk false;
:set MainIfInetOk (($ResultGoogle + $Resultyandex + $ResultMail) >= (2 * $PingCount))
:put "MainIfInetOk=$MainIfInetOk"

Теперь решаем, что делать в оговоренных случаях. Если неравно (ответов меньше, чем ожидалось или нет совсем), то ..., в остальных случаях ...

Код: Выделить всё

if (!$MainIfInetOk) do={

}
if ($MainIfInetOk) do={

}

Это тело основного скрипта, в многоточие надо подставить нужные команды , вплоть до старта другого скрипта.
Из хотелок:
1. реализуем шедулером, проще не бывает.
2. делал, тоже не столь сложно...
3. ну нет у меня РРРоЕ, проверку этого канала сам скажешь, как проверять. Если надо, добавим.
4. вот тут я бы подумал, хз, как сделать, чтобы не отправляло при каждой проверке...
5. старт скрипта по команде из скрипта - не проблема.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
Dragon_Knight
Сообщения: 1724
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

А случае пинга да, но как получить само состояние интерфейса: Enabled, Disabled, и состояние подключение: Connected, Disconected?
Пишу и получаю фиру:
:put [[/interface find name="ISP-PPPoE-OPCOM"] status]
*c


Небольшой свод правил логики и ссылок:
  1. Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
  2. Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
  3. Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
  4. Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
  5. Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
  6. name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
  7. Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
  8. Мой сайт по Mikrotik: Global Zone >> MikroTik.
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Код: Выделить всё

/interface pppoe-client monitor pppoe-out1 once do={:put $status;}

Как-то так получишь состояние интерфейса. Причем любого...
Scripting Examples писал(а):Monitoring interface status

The example writes a message in system's log if the ether1 interface is not disconnected (e.g., when cable is not working, or plugged out). You may use it to constantly monitor interfaces' status.

Код: Выделить всё

:global u
/interface ethernet monitor ether1 once do={
  :set u $status
  }
:if ($u != "link-ok") do={
  :log message="interface ether1 is disconnected"
  }

Other similar example is to do a reboot once cable is disconnected from the router:

Код: Выделить всё

:global u
/interface ethernet monitor ether1 once do={
  :set u $status
  }
:if ($u != "link-ok") do={
  /system reboot
  }


To save interface statistics to a file you will need to perform the following tasks:

Make a system script that will write to the logs interface status.

Код: Выделить всё

 [admin@MikroTik] system script> add name=eth_stat_to_log source={
      /interface ethernet monitor ether1 once do={:log \
    \... message=("\[My log 001\] :: Eth1 status: " . $status)}}


Attach this script to a system scheduler event.

Код: Выделить всё

  [admin@MikroTik] system scheduler> add interval=1h name="int_to_log" \
    \... on-event=eth_stat_to_log

Configure System-Info facility to log all information to disk.

Код: Выделить всё

 /system logging facility set System-Info=disk



Полный текст находится тут


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну что, дальше будем писать?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну давай еще шажок сделаем. Попробуем связку из пары скриптов и шедулера. Сначала создадим шедулер Ping в теле пишем что-то типа

Код: Выделить всё

/system script run Ping

Старт от запуска, интервал 5 минут.
Затем с таким же именем создадим скрипт Ping ( ну я часто так делаю, чтобы не плодить тучу названий)

Код: Выделить всё

# Создадим пустую переменную
:local sta;
# Мониторим нужный интерфейс, приравниваем значение нашей переменной к значению переменной мониторинга по имени status
/interface pppoe-client monitor pppoe-out1 once do={:set sta $status;}
# Если наша переменная после изменения не оказывается connected, шлем sms на номер +79013333333  и запускаем скрипт отложенного старта
if ($sta != "connected") do={/tool sms send usb1 "+79013333333" message="Tunnel is not up"
/system script run Delay;
} else={
# Если туннель проверку прошел, начинается проверка интернет-соединения. Принцип описан в соответствующей теме
:delay 100;

:local PingCount 3
:local google 8.8.8.8
:local yandex 77.88.8.8
:local mail  94.100.180.201
:local ResultGoogle [/ping count=$PingCount $Google interface=WAN]
:local Resultyandex [/ping count=$PingCount $yandex interface=WAN]
:local ResultMail [/ping count=$PingCount $mail interface=WAN]


:local MainIfInetOk false;
:set MainIfInetOk (($ResultGoogle + $Resultyandex + $ResultMail) >= (2 * $PingCount))
:put "MainIfInetOk=$MainIfInetOk"


if (!$MainIfInetOk) do={/tool sms send usb1 "+79013333333" message="Bad internet connection";
/system script run Delay;
}}


Теперь создаем скрипт с именем Delay

Код: Выделить всё

:delay 30;
/system scheduler disable Ping;

:delay 3600;
/system scheduler enable Ping;


Пояснять, что как и зачем работает надо? Если надо, напишу комментарии.
Кстати, насчет работает, у меня нет ни туннеля ни "свистка". Так что всё собирал просто в голове. По идее должно работать, но не факт. Проверяй...
Конечно это не все твои хотелки, но давай по кусочкам будем собирать.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
Dragon_Knight
Сообщения: 1724
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

ммм. Нада посидеть и заняться допилить по вашим наброскам. Спасибо.
Только сейчас я свой 1009 чуть в кирпич не превратил.... Соседняя тема про ROS 6.16...


Небольшой свод правил логики и ссылок:
  1. Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
  2. Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
  3. Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
  4. Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
  5. Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
  6. name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
  7. Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
  8. Мой сайт по Mikrotik: Global Zone >> MikroTik.
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Да у меня не горит :-) Я ща к компу вечером попадаю только. И максимум высиживаю минут сорок. Так что продуктивных посиделок пока никак....
Как получится посмотреть, говори, будем думать как остальные хотелки допилить... И эти изменить на более приемлемые.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить