Обновление маршрутов из скрипта засоряет лог

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Ответить
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: не понятка с обновлениями для Routerboard

Сообщение Chupaka »

sasha300 писал(а):как заблокировать вывод сообщений с тегом system, чтобы в логах этих записей не было?
в logging rules добавить в правило, которое его выводит, тег "!system"
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: не понятка с обновлениями для Routerboard

Сообщение sasha300 »

для этого объявляем глобальную переменную, которая предыдущее состояние хранит. если состояние изменилось - обновляем переменную, запускаем скрипт
Можете это отразить в коде? А то слабо представляю, как глобальная переменная будет хранить предыдущее состояние :?:
И как понимаю, при вашем решении не будет такого бардака с логами?
которое его выводит, тег "!system"
Сделал вот так:
2016-05-21_140728.jpg
2016-05-21_140728.jpg (43.95 КБ) 7165 просмотров
Все равно выдает изменение маршрутов, если же делаю так:
2016-05-21_140921.jpg
2016-05-21_140921.jpg (46.72 КБ) 7165 просмотров
то начинает выдавать чересчур подробная информация.
Кстати, а как узнать, какие сообщения не будут приходить, если блокирнуть system? А то вот тут написано, что "Generic system messages", в частности интересует, будут ли при !system отражаться, кто когда заходил на Микротик? Методом тыка можно, но ведь должно же быть подробное разьяснение по этому тегу в доках!
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: не понятка с обновлениями для Routerboard

Сообщение Chupaka »

sasha300 писал(а):
для этого объявляем глобальную переменную, которая предыдущее состояние хранит. если состояние изменилось - обновляем переменную, запускаем скрипт
Можете это отразить в коде? А то слабо представляю, как глобальная переменная будет хранить предыдущее состояние :?:
И как понимаю, при вашем решении не будет такого бардака с логами?
как-то так:

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

global prevState;

if (_CONDITION_) do={
  if (!$prevState) do={
    put "going from false to true";
    set prevState true;
  }
} else={
  if ($prevState) do={
    put "going from true to false";
    set prevState false;
  }
}
в результате "put bla-bla-bla" будет выполняться единожды при изменении условия _CONDITION_. если при следующем запуске скрипта _CONDITION_ имеет то же значение, что и прошлый раз, скрипт ничего не будет делать
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: не понятка с обновлениями для Routerboard

Сообщение sasha300 »

спасибо, но уже буду опробую завтра
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: не понятка с обновлениями для Routerboard

Сообщение sasha300 »

Переменная prevState принимает только булев тип, т.е. значения 0 или 1?
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: не понятка с обновлениями для Routerboard

Сообщение Chupaka »

что в неё записать - то она и примет. в RouterOS нет строгой типизации

тот пример, что я привёл, точно работает, я сначала проверил его у себя :)
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: не понятка с обновлениями для Routerboard

Сообщение sasha300 »

В общем вот сам скрипт в shedule, не дающий в log лишнюю инфу:

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

:global condition
:if ($condition = nil) do={
:set $condition "no"
} else={
:local pingresult1 [ping 194.58.117.14 interface=ether1-External count=3];
:local pingresult2 [ping 8.8.4.4 interface=ether1-External count=3];
:if (($pingresult1+$pingresult2)<2) do={
:if ($condition = "yes") do={
/ip route enable numbers=[find gateway=192.168.8.1]
/ip route set numbers=[find gateway=192.168.8.1] distance=1
/ip route enable numbers=[find comment=ping]
/ip route set numbers=[find gateway=109.195.xx.xx and  dst-address=0.0.0.0/0] distance=2
:set condition "no"
/delay 5
/system script run email
/system script run reconnect
}
} else={
:if ($condition = "no") do={
/ip route set numbers=[find gateway=192.168.8.1] distance=2
/ip route disable numbers=[find gateway=192.168.8.1]
/ip route set numbers=[find gateway=109.195.xx.xx and  dst-address=0.0.0.0/0] distance=1
/ip route disable numbers=[find comment=ping]
:set condition "yes"
/delay 5
/system script run post
/system script run reconnect
}
}
}
Хотя код выполняет все необходимые задачи, но может есть какие-то замечания?
p.s.: про
"numbers=" здесь нет необходимости писать
знаю, немного попозже уберу, интересуют другие замеченные ошибки :?
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: не понятка с обновлениями для Routerboard

Сообщение Chupaka »

теперь хоть понятно, кто там что делает, безо всех этих переименований :)
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: не понятка с обновлениями для Routerboard

Сообщение sasha300 »

так а сам код? есть ли по нему замечания?
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: не понятка с обновлениями для Routerboard

Сообщение Chupaka »

нет :) единственное, я бы не стал усложнять дело проверкой на nil с последующим присваиванием "no" (чего в моём примере и не было). проще всё, что не "yes", считать этим самым "no" - и не заморачиваться :)
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: Обновление маршрутов из скрипта засоряет лог

Сообщение sasha300 »

Немного переделал скрипт:
:global variable
:local pingresult1 [ping 194.58.117.14 interface=ether1-External count=3];
:local pingresult2 [ping 8.8.4.4 interface=ether1-External count=3];
:if (($pingresult1+$pingresult2)<2) do={
:if (!$variable) do={
/ip route enable [find gateway=192.168.8.1]
/ip route set [find gateway=192.168.8.1] distance=1
/ip route enable [find comment=ping]
/ip route set [find gateway=109.195.xx.xx and dst-address=0.0.0.0/0] distance=2
:set variable true;
/delay 5
/system script run email
/system script run reconnect
}
}
else={
:if ($variable) do={
/ip route set [find gateway=192.168.8.1] distance=2
/ip route disable [find gateway=192.168.8.1]
/ip route set [find gateway=109.195.xx.xx and dst-address=0.0.0.0/0] distance=1
/ip route disable [find comment=ping]
:set condition false;
/delay 5
/system script run post
/system script run reconnect
}
}
}
Так даже первое do не срабатывает! Или весь код поставить в условие :set $variable true; ?
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Обновление маршрутов из скрипта засоряет лог

Сообщение Chupaka »

sasha300 писал(а):Так даже первое do не срабатывает!
может, потому, что во втором делается что-то таинственное: ":set condition false;"?
подозреваю, там вместо condition должно быть variable :)

UPD: подсказка: если код обрамлять тегом code, а не quote, то будет сохраняться форматирование :)
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: Обновление маршрутов из скрипта засоряет лог

Сообщение sasha300 »

в общем с этим скриптом закончил, все работает (правда оставил number, так как так проще):

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

:global condition
:local pingresult1 [ping 194.58.117.14 interface=ether1-External count=3];
:local pingresult2 [ping 8.8.4.4 interface=ether1-External count=3];
:if (($pingresult1+$pingresult2)<2) do={
:if ($condition) do={
/ip route enable numbers=[find gateway=192.168.8.1]
/ip route set numbers=[find gateway=192.168.8.1] distance=1
/ip route enable numbers=[find comment=ping]
/ip route set numbers=[find gateway=109.195.xx.xx and  dst-address=0.0.0.0/0] distance=2
:set condition false;
/delay 5
/system script run email
/system script run reconnect
}
} else={
:if (!$condition) do={
/ip route set numbers=[find gateway=192.168.8.1] distance=2
/ip route disable numbers=[find gateway=192.168.8.1]
/ip route set numbers=[find gateway=109.195.xx.xx and  dst-address=0.0.0.0/0] distance=1
/ip route disable numbers=[find comment=ping]
:set condition true
/delay 5
/system script run post
/system script run reconnect
}
}
p.s.: форматирование удалилось, так как копировал из самого шедуллера. В notepadd++ код не сохранился :(
Ответить