Fehlerbehandlung in Mikrotik-Skripten


7

Ich habe RouterOS 5.14 auf RB493G. Ich muss ein Skript schreiben, das gestartet wird

/tool fetch ...

Die Ausführung des Abrufs kann zu einem Fehler führen. Dies ist in Ordnung (URL ist manchmal nicht verfügbar). Skript hängt an Fehler. Gibt es eine Möglichkeit, dies 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.

Antworten:


1

Es scheint, dass diese Art von Skripten keine Fehlerbehandlung enthält . Sie sollten wahrscheinlich die von diesem Typen vorgeschlagene Lösung übernehmen :

Sie müssen also zwei Skripte haben, eines, das ausgeführt wird und Dinge erledigt und Situationen behandelt, in denen ein Wert nicht wie erwartet empfangen wird, und ein anderes Skript erledigt den Job, der fehlschlagen kann. Wenn das zweite Skript fehlschlägt, wird das erste Skript, das das zweite Skript aufgerufen hat, um den Job auszuführen, fortgesetzt.


1
Danke, das funktioniert. Mikrotik-Skripte sind sehr arm und krumm :(
Selivanov Pavel

1
"Sie können Ihr Kopfgeld in 6 Stunden vergeben." - Das Kopfgeld gehört dir morgen.
Selivanov Pavel

Ich habe hinzugefügt: Verzögerung, um die Prozessorlast mit leerem Zyklus zu reduzieren
Selivanov Pavel

7

UPDATE ab RouterOS v6.2

Sie können jetzt einen doBlock mit einer Fehlerbehandlungsroutine erstellen :

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

1
Schließlich fügten sie die Fehlerbehandlung hinzu. Vielen Dank, @ Old-Pro!
Selivanov Pavel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.