aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christian Hesse <mail@eworm.de>2020-03-12 08:40:29 +0100
committerGravatar Christian Hesse <mail@eworm.de>2020-03-12 08:40:29 +0100
commit98585afe1cc068203e5d713eb9965c930ac762de (patch)
tree9faee0f709c3f69b2456f561d3ea3f89191a14fb
parent63ed093340df70c79ecec21396d136a03d869eca (diff)
add script 'global-wait'
Run this in schedulers that fire on startup without interval. Schedulers should look something like this: / system scheduler { add name=global-scripts on-event="/ system script { run global-config; run global-config-overlay; run global-functions; }" start-time=startup; add name=bridge-port-to-default on-event="/ system script { run global-wait; run bridge-port-to-default; }" start-time=startup; }
-rw-r--r--global-functions4
-rw-r--r--global-wait11
-rw-r--r--script-updates4
3 files changed, 17 insertions, 2 deletions
diff --git a/global-functions b/global-functions
index be7a7ba..eda9ab6 100644
--- a/global-functions
+++ b/global-functions
@@ -9,6 +9,7 @@
:global ExpectedConfigVersion 13;
# global variables not to be changed by user
+:global GlobalFunctionsReady false;
:global Identity [ / system identity get name ];
:global SentConfigChangesNotification "-";
:global SentLteFirmwareUpgradeNotification "-";
@@ -524,3 +525,6 @@
:delay 1s;
}
}
+
+# signal we are ready
+:set GlobalFunctionsReady true;
diff --git a/global-wait b/global-wait
new file mode 100644
index 0000000..29d634d
--- /dev/null
+++ b/global-wait
@@ -0,0 +1,11 @@
+#!rsc
+# RouterOS script: global-wait
+# Copyright (c) 2020 Christian Hesse <mail@eworm.de>
+#
+# wait for global-functions to finish
+
+:global GlobalFunctionsReady;
+
+:while ($GlobalFunctionsReady != true) do={
+ :delay 500ms;
+}
diff --git a/script-updates b/script-updates
index 6ecdd37..38165c9 100644
--- a/script-updates
+++ b/script-updates
@@ -36,9 +36,9 @@
:if ($SchedulerVal->"name" != "global-scripts" && \
$SchedulerVal->"start-time" = "startup" && \
$SchedulerVal->"interval" = 0s && \
- [ :pick ($SchedulerVal->"on-event") 0 7 ] != ":delay ") do={
+ !(($SchedulerVal->"on-event") ~ "\\brun global-wait\\b")) do={
$LogPrintExit warning ("Scheduler " . $SchedulerVal->"name" . " starts on startup, " . \
- "without interval. Add delay to make sure the configuration is available!") false;
+ "without waiting for global-functions. Run 'global-wait' to avoid race conditions!") false;
}
}