Frage Fehlerbehandlung in Mikrotik-Skripten


Ich habe RouterOS 5.14 auf RB493G. Ich muss Skript schreiben, das startet

/tool fetch ...

Die Ausführung des Abrufs kann zu einem Fehler führen, dies ist OK (URL ist manchmal nicht verfügbar). Skript hängt bei Fehler. Gibt es eine Möglichkeit, es zu ignorieren?


Lösung:

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

Warnung: nicht dokumentiert ": execute" wird verwendet.


5
2018-05-23 13:50


Ursprung




Antworten:


Es scheint, dass Es gibt keine Fehlerbehandlung in dieser Art von Skripten. Sie sollten wahrscheinlich die vorgeschlagene Lösung übernehmen dieser Typ:

Sie müssen also 2 Skripte haben, eines, das läuft und stopft und behandelt die Situation, wenn ein Wert nicht wie erwartet empfangen wird, und ein anderes Skript macht den Job, der fehlschlagen kann. Wenn das zweite Skript fehlschlägt, wird als Erstes das Skript, das das zweite Skript aufgerufen hat, fortgesetzt.


1
2018-05-26 18:12



Danke, das funktioniert. Mikrotik Skripte sind sehr arm und schief :( - Selivanov Pavel
"Sie können Ihr Kopfgeld in 6 Stunden vergeben." - Das Kopfgeld gehört dir morgen. - Selivanov Pavel
Ich habe hinzugefügt: Verzögerung, um Prozessorlast mit leeren Zyklus zu reduzieren - Selivanov Pavel


UPDATE ab RouterOS v6.2

Sie können jetzt ein do Block mit einem Fehlerhandler:

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

5
2018-06-21 05:01



Schließlich haben sie die Fehlerbehandlung hinzugefügt. Danke, @ Alt-Profi! - Selivanov Pavel