Mikrotik 脚本中的错误处理

Sel*_*vel 7 scripting mikrotik

我在 RB493G 上安装了 RouterOS 5.14。我需要编写脚本,启动

/tool fetch ...
Run Code Online (Sandbox Code Playgroud)

执行 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"
   }
Run Code Online (Sandbox Code Playgroud)

警告:使用了未记录的 ":execute"。

Old*_*Pro 8

从 RouterOS v6.2 开始更新

您现在可以do使用错误处理程序创建一个块:

:do {
  /tool fetch $url
  :put "Fetch OK"
} on-error={ :put "Fetch ERROR"};
Run Code Online (Sandbox Code Playgroud)


Avi*_*vio 1

此类脚本似乎没有错误处理。您可能应该采用这个人提出的解决方案:

因此,您必须有 2 个脚本,一个脚本运行并执行某些操作,并处理未按预期收到某些值时的情况,另一个脚本执行该工作,但可能会失败。因此,如果第二个脚本失败,第一个调用第二个脚本来完成任务的脚本将继续。