Некоторые картинки не загружаются из РФ и РК, используйте VPN.

воскресенье, 6 ноября 2022 г.

Mikrotik script проверить наличие другого экземпляра и вызвать исключение

 На bash мы можем заглянуть в диспетчер задач (ps) и найти процесс нашей программы, прежде чем ее запускать (здесь рассматривал). На Mikrotik же такого нету, приходится извращаться. Зачем это надо?, если один из экземпляров программы по какой то причине зависнет, а еще он использует глобальные переменные, то мы можем получить неожиданный результат, поэтому лучше избегать таких коллизий. 

Сама идея проста - проверить некоторую глобальную переменную, которую создаем после проверки, но у Mikrotik свои заморочки и приходится изгаляться:

# ищем среди глобальных переменных. ошибки здесь не будет, либо "", либо id
# в отличии от поиска через get, там и ошибки, и "не моментальное заполнение" списка,
# т.е. первый экземпляр висит уже 10  сек, а переменные через get еще отсутствуют
:if ([/system script environment find where name=RunProgram]!="") do={
	:log error ("There is another instance of the program running, exit")
	:error message="There is another instance of the program running, exit"
}
# объявляем глобальную переменную
:global RunProgram true
...
...
...
# уничтожаем переменную
:set RunProgram

Есть более изящный вариант - проверка в текущих заданиях:

:local scriptname "MyScript"
:if ([:len [/system script job find script=$scriptname]] > 0) do={
	:log error "There is another instance of the program running, exit"
    :error message="There is another instance of the program running, exit"
}


Комментариев нет:

Отправить комментарий