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

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

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

Сообщение sasha300 »

начал решать трабл с обновами, так появилась другая проблема - лог перегружен избыточной инфой
скрипт в shedule выполняется раз в 10 сеунд, так в логах я вижу следующее:
2016-05-01_230909.jpg
2016-05-01_230909.jpg (123.46 КБ) 8224 просмотра
думаю, дай-ка рубану info:
2016-05-01_231032.jpg
2016-05-01_231032.jpg (35.37 КБ) 8224 просмотра
логи смены маршрутов прекратились, но теперь я не могу увидеть, кто заходил на тик
В общем как сделать, чтобы работа смены маршрутов скрипта (именно скрипта!!) не показывалась в логах?

Кстати, трабл с обновлением routerboard решилась, зашел сейчас в эту менюху и вижу:
2016-05-01_231538.jpg
2016-05-01_231538.jpg (47.01 КБ) 8224 просмотра
очень странно, так как вчера, после нажатия на клавишу "Upgrade", роутер перезагружал. Видать нужно некоторое время, чтобы прошивка обновилась. Но что означает "Factory Firmware"? Какой смысл несет параметр заводская прошивка? Типа какая прошивка была в самом начале?
Зачем нужна эта строка?
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

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

Сообщение sasha300 »

кстати по логам, попробовал сделать вот такое правило:
2016-05-01_233424.jpg
2016-05-01_233424.jpg (31.78 КБ) 8224 просмотра
но в логах начался переизбыток не нужной мне инфы
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka »

sasha300 писал(а):как сделать, чтобы работа смены маршрутов скрипта (именно скрипта!!) не показывалась в логах?
логичнее всего будет не менять маршрут, если у него параметры не поменялись - тогда запись в лог будет добавляться только при непосредственной смене :) для подробностей нужен сам скрипт
sasha300 писал(а):Видать нужно некоторое время, чтобы прошивка обновилась.
нет
sasha300 писал(а):Но что означает "Factory Firmware"? Какой смысл несет параметр заводская прошивка? Типа какая прошивка была в самом начале?
Зачем нужна эта строка?
то ли для информации, то ли резервная на случай поломки основной... данных нет даже в официальной документации :)
sasha300 писал(а):кстати по логам, попробовал сделать вот такое правило:
2016-05-01_233424.jpg
но в логах начался переизбыток не нужной мне инфы
всё правильно, в лог попали всякие pptp,debug - а там информации действительно очень много :)
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

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

Сообщение sasha300 »

логичнее всего будет не менять маршрут, если у него параметры не поменялись - тогда запись в лог будет добавляться только при непосредственной смене :) для подробностей нужен сам скрипт
Ноу проблем ;) :

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

: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)<3) 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
/delay 5
/system script run email
/system script run remove
/system script set remove name=reconnect
/system script set email name=stop
/system script set stay name=post
} else={

/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]
/system script run post
/system script run reconnect
/system script set reconnect name=remove
/system script set post name=stay
/system script set stop name=email
}

Если возникнет вопрос по переименовки скриптов, то делается это для того, чтобы они не запускались постоянно, типа выполнился, переименовался и т.о. больше не запускается. Но с другой стороны трабл с тем, что код в sheduler-е постоянно меняет маршрут, поэтому переименовка скриптов тут не при делах
p.s.: кстати, как правильно называть скрипт в System => Sheduler? А то получается что скрипты в разделе system => scripts, тогда в разделе "sheduler" что?
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka »

sasha300 писал(а):как правильно называть скрипт в System => Sheduler? А то получается что скрипты в разделе system => scripts, тогда в разделе "sheduler" что?
Scheduler = планировщик
sasha300 писал(а):трабл с тем, что код в sheduler-е постоянно меняет маршрут, поэтому переименовка скриптов тут не при делах
на примере строки "/ip route set [find gateway=192.168.8.1] distance=1" (да, "numbers=" здесь нет необходимости писать): она ищет маршрут с указанным шлюзом и меняет ему distance, даже если он уже единица. для исправления - "find gateway=192.168.8.1 distance!=1". остальные по аналогии
sasha300 писал(а):Если возникнет вопрос по переименовки скриптов, то делается это для того, чтобы они не запускались постоянно, типа выполнился, переименовался и т.о. больше не запускается.
ШТО-О-О?!? не проще запись в scheduler'е просто выключить, чтобы она не запускалась постоянно?..
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

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

Сообщение sasha300 »

не проще запись в scheduler'е просто выключить, чтобы она не запускалась постоянно?
Запись в scheduler'е меняет маршруты на резервный, в случае падения основного канал и возвращается на основной канал, когда тот начинает работать. Если я отключу эту запись, то у меня эта фича работать не будет. Или я чего-то не догнал?
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka »

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

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

Сообщение sasha300 »

Chupaka писал(а):если планировщик запускает скрипт и затем переименовывает его, чтобы он больше не запускался - так может нужно просто его не запускать, без переименований?.. я про логику работы в целом. зачем усложнять понимание?
Извиняюсь, немного выпал из темы ;)
Сам планировщик запускается каждые 10 секунд и если случается одно из двух условий, то запускается скрипт. Но он не должен запуститься ещё через десять секунд, поэтому, планировщик, запустив один раз скрипт, меняет его имя и таким образом больше ничего не запускается. Напротив, если сложилась false ситуация, то опять же идет запуск скрипта и его дальнейшее переименование, т.о. опять скрипты отрабатываются по одному разу.
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

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

Сообщение sasha300 »

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

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

Сообщение Chupaka »

т.е. скрипт должен срабатывать только при изменении состояния. для этого объявляем глобальную переменную, которая предыдущее состояние хранит. если состояние изменилось - обновляем переменную, запускаем скрипт
Аватара пользователя
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 КБ) 7166 просмотров
Все равно выдает изменение маршрутов, если же делаю так:
2016-05-21_140921.jpg
2016-05-21_140921.jpg (46.72 КБ) 7166 просмотров
то начинает выдавать чересчур подробная информация.
Кстати, а как узнать, какие сообщения не будут приходить, если блокирнуть 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++ код не сохранился :(
Ответить