помогите разобрать пример скрипта execute из wiki

Обсуждение ПО и его настройки
Ответить
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

на этой официальной странице есть такой пример:

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

{
:local j [:execute {/interface print follow where [:log info ~Sname~]}];
:delay 10s;
:do { /system script job remove $j } on-error={}
}
Я не могу понять что тут пытаются донести и как это работает.
Я немного развернул скрипт:

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

{
:local j [:execute {/interface print follow where [:log info ~Sname~]}];
:log info [:len $j]
:log info [:typeof $j]
:log info [/system script job print detail as-value]
:delay 10s;
:do { /system script job remove $j } on-error={:log info "no ID"}
}
в логе получаю выхлоп
16:30:00 script,info 4
16:30:00 script,info id
16:30:00 script,info ~Sname~
16:30:00 script,info ~Sname~
16:30:00 script,info ~Sname~
16:30:00 script,info ~Sname~
16:30:00 script,info ~Sname~
16:30:00 script,info ~Sname~
16:30:00 script,info ~Sname~
16:30:00 script,info .id=*60e;.nextid=*61b;owner=pepelxl;policy=local;telnet;ssh;ftp;reboot;read;write;policy;test;winbox;password;web;sniff;sensitive;api;romon;dude;tikapp;
started=jun/21/2020 16:18:01;type=login;.id=*61b;.nextid=*61c;owner=pepelxl;parent=*60e;policy=local;telnet;ssh;ftp;reboot;read;write;policy;test;winbox;password;web;sniff;s
ensitive;api;romon;dude;tikapp;started=jun/21/2020 16:30:00;type=command;.id=*61c;owner=pepelxl;policy=local;telnet;ssh;ftp;reboot;read;write;policy;test;winbox;password;web
;sniff;sensitive;api;romon;dude;tikapp;started=jun/21/2020 16:30:00;type=command
16:30:10 script,error script error: interrupted

В общем то не понята вся конструкция которую пытались донести до меня.
1- с начала мы видим объявление follow - на кой они его здесь применили?
2- потом включили перебор сравнения по where но вместо значение указали действие log, которое ни чего не возвращает для where.
видимо из-за этой конструкции идёт перебор всех значений и 7 раз печатается ~Sname~ (у меня 7 интерфейсов)
3- Далее видно, что переменной j присвоен тип id и значение 4, а НЕТ ни четвёртого терминала, ни терминала с id равным четырём. Так и хочется спросить - какого х...?
4- в конце лога видно, что скрипт падает в ошибку, и вот тут я вообще не понимаю что её вызывает? какое поведение скрипта? Однако если из вызова мы уберём follow, то вполне предсказуемо увидим в логе - no ID.

Вообще исследую возможности по парсингу логов "на лету", так как все примеры из wiki требуют циклический запуск скрипта по расписанию. А вот если бы можно было запустить одновременно два аргумента follow и as-value, то скрипт продолжал бы работу по появлению записи, вот это было бы то что надо. Ну или добраться до консоли из скрипта(local, ssh, telnet) вот тогда тоже можно было бы использовать follow.


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

В общем то не понята вся конструкция которую пытались донести до меня.
Думаю, что конкретно до Вас, ничего донести не пытались, пример в Wiki предназначен для всех.
Он просто выдернут из контекста какого-то скрипта для демонстрации работы :execute и не более того. Чего Вы к нему привязались ? Найдите автора скрипта и его спросите, а лучше обратитесь в официальную поддержку Микротик, Вам там всё разъяснят ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить