7

I have RouterOS 5.14 on RB493G. I need to write script, that launches

/tool fetch ...

Execution of fetch may result in error, this is OK(URL may be sometimes unavailable). Script hangs on error. Is there any way to ignore it?


Solution:

[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"
   }

Warning: not documented ":execute" is used.

Selivanov Pavel
  • 2,126
  • 3
  • 23
  • 47

2 Answers2

8

UPDATE as of RouterOS v6.2

You can now create a do block with an error handler:

:do {
  /tool fetch $url
  :put "Fetch OK"
} on-error={ :put "Fetch ERROR"};
Old Pro
  • 1,335
  • 10
  • 20
1

It seems that there isn't error handling in this kind of scripts. You should probably adopt the solution proposed by this guy:

So you have to have 2 scripts, one that runs and does stuff and handles situation when some value is not received as expected, and other script does the job, that can fail. as a result, if second script fails, first one that called second script to do the job will continue.

Avio
  • 5,842
  • 2
  • 16
  • 8