Ошибка в '/system script' ?

Обсуждение ПО и его настройки
Ответить
Jav
Сообщения: 10
Зарегистрирован: 19 ноя 2019, 17:30

Наткнулся на интересный глюк при работе с '/system script ‘!

Часто надо посмотреть какой из скриптов сейчас работает.
:ne_vi_del: Странно, но из ‘/system script job’ невозможно получить имя скрипта. Тогда логично, что надо написать скрипт: Проверить работает ли сейчас каждый из существующих скриптов.
:ne_vi_del: Странно_2, но готового скрипта не нашел. Пробую написать свой:

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

/log info "####  Test of '/system script & job' "

:local a [/system script find]
:local NameK 
:local NameV
:local run

/log info "Scripts running $[:len [/system script job find]] of $[:len $a]"
:foreach k,v in=$a do={
   :set NameK [/system script get $k name ]
   :set NameV [/system script get $v name ]

   :set run [:len [/system script job find script=$NameV ]]
#  :set run [:len [/system script job find script=$NameK ]]

   :log info ("K=$k V=$v Run=$run NameK=$NameK NameV=$NameV")
}
/log info "END"
Как работает:
Запрашиваем массив существующих скриптов ‘a’. По каждому элементу получаем элемент массива k=Key (ключ=№ п/п) и v=Value (значение=ID). По этим k и v ищем название скрипта. А потом проверяем, есть ли работающий скрипт с таким именем.
Запускаем, проверяем лог…. Произносим много непечатных слов!!! :ups:

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

May/02/2020 22:31:50 script,info ####  Test of '/system script & job' 
May/02/2020 22:31:50 script,info Scripts running 1 of 33
May/02/2020 22:31:50 script,info K=0 V=*1 Run=0 NameK=DDNS-NoIp NameV=DDNS-NoIp
<....тут грызли мыши....>
May/02/2020 22:31:51 script,info K=29 V=*49 Run=0 NameK=Test_job NameV=Test_job
May/02/2020 22:31:51 script,info K=30 V=*4B Run=0 NameK= NameV=Test_script_job 
May/02/2020 22:31:51 script,info K=31 V=*50 Run=0 NameK=Test_script_job  NameV=Test_scr
May/02/2020 22:31:51 script,info K=32 V=*52 Run=1 NameK= NameV=script1
May/02/2020 22:31:51 script,info END

Вначале все идет хорошо, но после 3х десятков строк поиск по №, и поиск по ID в '/system script ‘ начинает разъезжаться! Он не просто не находит некоторые значения, но и может дать название от другого скрипта! А значит и проверка «запущен ли этот скрипт» тоже будет давать неверный результат! А если попытаемся остановить, то можем убить вообще не тот скрипт!!!
Например, «K=31 V=*50 Run=0 NameK=Test_script_job NameV=Test_scr» - здесь NameV верно, а NameK взялось от предыдущего скрипта!

То есть две одинаковые строчки могут давать разный результат, хотя при отладке вы будете уверены, что все сделали правильно! Вы же проверили десятки элементов и все работало как надо!
:set run [:len [/system script job find script=$NameV ]] - так правильно!
:set run [:len [/system script job find script=$NameK ]] - так получим ошибку!!!!


Вопросы по теме: :s_o_s:
1. Как еще можно ПРАВИЛЬНО определить какие скрипты сейчас запущены? И сколько CPU они загружают?
2. Почему поиск ‘/system script get $k name’ по Key и Value может давать разный результат?
3. Можно ли сопоставить ID скрипта в '/system script' и '/system script job' ?
4. Можно ли как то сопоставить список '/system script' и '/system script job' кроме как по имени?

RB951G-2HnD v6.46.5 (stable)


Давайте жить дружно!
MikroTik RB951G-2HnD
yalta
Сообщения: 4
Зарегистрирован: 14 мар 2019, 22:28



Ответить