Назад | Перейти на главную страницу

Обработка ошибок в скриптах Mikrotik

У меня RouterOS 5.14 на RB493G. Мне нужно написать сценарий, который запускает

/tool fetch ...

Выполнение выборки может привести к ошибке, это нормально (иногда URL-адрес может быть недоступен). Скрипт зависает при ошибке. Есть ли способ проигнорировать это?


Решение:

[admin@Mikrotik] >> /system script
0 name=safe-fetch source=
:global done
:global url

/tool fetch $url
:Set done=true

1 name=test source=
:global done
:global url="google.com"

:set done false
:execute safe-fetch
:local counter 0
:while ( $done != true && $counter < 10 ) do={
    :set counter ($counter+1)
    :delay 0.2
    }

if ($done = "true") do={
   :put "Fetch OK"
   } else={
   :put "Fetch ERROR"
   }

Предупреждение: используется недокументированное ": выполнить".

ОБНОВЛЕНИЕ RouterOS v6.2

Теперь вы можете создать do блок с обработчиком ошибок:

:do {
  /tool fetch $url
  :put "Fetch OK"
} on-error={ :put "Fetch ERROR"};

Кажется, что нет обработки ошибок в такого рода скриптах. Вам, вероятно, следует принять решение, предложенное этот парень:

Таким образом, у вас должно быть 2 сценария, один из которых запускается, выполняет различные действия и обрабатывает ситуацию, когда какое-то значение не получено должным образом, а другой сценарий выполняет работу, которая может завершиться ошибкой. в результате, если второй сценарий терпит неудачу, то первый, который вызвал второй сценарий для выполнения работы, продолжит работу.