aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--accesslist-duplicates.capsman.rsc7
-rw-r--r--accesslist-duplicates.local.rsc7
-rw-r--r--accesslist-duplicates.template.rsc7
-rw-r--r--accesslist-duplicates.wifi.rsc7
-rw-r--r--backup-cloud.rsc9
-rw-r--r--backup-email.rsc12
-rw-r--r--backup-partition.rsc14
-rw-r--r--backup-upload.rsc10
-rw-r--r--capsman-download-packages.capsman.rsc10
-rw-r--r--capsman-download-packages.template.rsc10
-rw-r--r--capsman-download-packages.wifi.rsc10
-rw-r--r--capsman-rolling-upgrade.capsman.rsc8
-rw-r--r--capsman-rolling-upgrade.template.rsc8
-rw-r--r--capsman-rolling-upgrade.wifi.rsc8
-rw-r--r--certificate-renew-issued.rsc8
-rw-r--r--certs/Makefile2
-rw-r--r--check-certificates.rsc8
-rw-r--r--check-health.rsc9
-rw-r--r--check-lte-firmware-upgrade.rsc8
-rw-r--r--check-routeros-update.rsc41
-rw-r--r--collect-wireless-mac.capsman.rsc8
-rw-r--r--collect-wireless-mac.local.rsc8
-rw-r--r--collect-wireless-mac.template.rsc8
-rw-r--r--collect-wireless-mac.wifi.rsc8
-rw-r--r--daily-psk.capsman.rsc8
-rw-r--r--daily-psk.local.rsc8
-rw-r--r--daily-psk.template.rsc8
-rw-r--r--daily-psk.wifi.rsc8
-rw-r--r--dhcp-lease-comment.capsman.rsc8
-rw-r--r--dhcp-lease-comment.local.rsc8
-rw-r--r--dhcp-lease-comment.template.rsc8
-rw-r--r--dhcp-lease-comment.wifi.rsc8
-rw-r--r--dhcp-to-dns.rsc8
-rw-r--r--doc/mod/notification-ntfy.md2
-rw-r--r--doc/netwatch-dns.md2
-rw-r--r--firmware-upgrade-reboot.rsc10
-rw-r--r--fw-addr-lists.rsc12
-rw-r--r--global-config-overlay.rsc2
-rw-r--r--global-config.rsc9
-rw-r--r--global-functions.rsc57
-rw-r--r--global-wait.rsc2
-rw-r--r--gps-track.rsc8
-rw-r--r--hotspot-to-wpa-cleanup.capsman.rsc8
-rw-r--r--hotspot-to-wpa-cleanup.template.rsc8
-rw-r--r--hotspot-to-wpa-cleanup.wifi.rsc8
-rw-r--r--hotspot-to-wpa.capsman.rsc10
-rw-r--r--hotspot-to-wpa.template.rsc10
-rw-r--r--hotspot-to-wpa.wifi.rsc10
-rw-r--r--ip-addr-bridge.rsc2
-rw-r--r--ipsec-to-dns.rsc8
-rw-r--r--ipv6-update.rsc10
-rw-r--r--lease-script.rsc10
-rw-r--r--leds-day-mode.rsc2
-rw-r--r--leds-night-mode.rsc2
-rw-r--r--leds-toggle-mode.rsc8
-rw-r--r--log-forward.rsc9
-rw-r--r--mod/bridge-port-to.rsc8
-rw-r--r--mod/bridge-port-vlan.rsc8
-rw-r--r--mod/inspectvar.rsc8
-rw-r--r--mod/ipcalc.rsc8
-rw-r--r--mod/notification-email.rsc51
-rw-r--r--mod/notification-matrix.rsc14
-rw-r--r--mod/notification-ntfy.rsc29
-rw-r--r--mod/notification-telegram.rsc14
-rw-r--r--mod/scriptrunonce.rsc8
-rw-r--r--mod/ssh-keys-import.rsc14
-rw-r--r--mode-button.rsc25
-rw-r--r--netwatch-dns.rsc15
-rw-r--r--netwatch-notify.rsc8
-rw-r--r--news-and-changes.rsc2
-rw-r--r--ospf-to-leds.rsc8
-rw-r--r--packages-update.rsc16
-rw-r--r--ppp-on-up.rsc8
-rw-r--r--sms-action.rsc8
-rw-r--r--sms-forward.rsc10
-rw-r--r--super-mario-theme.rsc2
-rw-r--r--telegram-chat.rsc11
-rw-r--r--unattended-lte-firmware-upgrade.rsc2
-rw-r--r--update-gre-address.rsc8
-rw-r--r--update-tunnelbroker.rsc10
80 files changed, 601 insertions, 210 deletions
diff --git a/accesslist-duplicates.capsman.rsc b/accesslist-duplicates.capsman.rsc
index d6e2928..b611917 100644
--- a/accesslist-duplicates.capsman.rsc
+++ b/accesslist-duplicates.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: accesslist-duplicates.capsman
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -13,6 +13,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -31,4 +32,6 @@
}
:set ($Seen->$Mac) 1;
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/accesslist-duplicates.local.rsc b/accesslist-duplicates.local.rsc
index e90842d..ef0cf32 100644
--- a/accesslist-duplicates.local.rsc
+++ b/accesslist-duplicates.local.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: accesslist-duplicates.local
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -13,6 +13,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -31,4 +32,6 @@
}
:set ($Seen->$Mac) 1;
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/accesslist-duplicates.template.rsc b/accesslist-duplicates.template.rsc
index d275340..ab5b671 100644
--- a/accesslist-duplicates.template.rsc
+++ b/accesslist-duplicates.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: accesslist-duplicates%TEMPL%
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -40,4 +41,6 @@
}
:set ($Seen->$Mac) 1;
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/accesslist-duplicates.wifi.rsc b/accesslist-duplicates.wifi.rsc
index f4dae4b..0205598 100644
--- a/accesslist-duplicates.wifi.rsc
+++ b/accesslist-duplicates.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: accesslist-duplicates.wifi
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -13,6 +13,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -31,4 +32,6 @@
}
:set ($Seen->$Mac) 1;
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/backup-cloud.rsc b/backup-cloud.rsc
index f70752e..37ca92f 100644
--- a/backup-cloud.rsc
+++ b/backup-cloud.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: backup-cloud
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: backup-script, order=40
@@ -12,6 +12,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -34,6 +35,7 @@
:if ([ $ScriptLock $ScriptName ] = false) do={
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -44,6 +46,7 @@
:if ([ $MkDir ("tmpfs/backup-cloud") ] = false) do={
$LogPrint error $ScriptName ("Failed creating directory!");
+ :set ExitOK true;
:error false;
}
@@ -87,4 +90,6 @@
:set PackagesUpdateBackupFailure true;
}
/file/remove "tmpfs/backup-cloud";
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/backup-email.rsc b/backup-email.rsc
index e507c6e..489927b 100644
--- a/backup-email.rsc
+++ b/backup-email.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: backup-email
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: backup-script, order=20
@@ -12,6 +12,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -39,17 +40,20 @@
:if ([ :typeof $SendEMail2 ] = "nothing") do={
$LogPrint error $ScriptName ("The module for sending notifications via e-mail is not installed.");
+ :set ExitOK true;
:error false;
}
:if ($BackupSendBinary != true && \
$BackupSendExport != true) do={
$LogPrint error $ScriptName ("Configured to send neither backup nor config export.");
+ :set ExitOK true;
:error false;
}
:if ([ $ScriptLock $ScriptName ] = false) do={
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -69,6 +73,7 @@
:if ([ $MkDir $DirName ] = false) do={
$LogPrint error $ScriptName ("Failed creating directory!");
+ :set ExitOK true;
:error false;
}
@@ -116,9 +121,12 @@
:if ($I >= 120) do={
$LogPrint warning $ScriptName ("Files are still available, sending e-mail failed.");
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
:delay 1s;
:set I ($I + 1);
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/backup-partition.rsc b/backup-partition.rsc
index 51df454..b2b75ac 100644
--- a/backup-partition.rsc
+++ b/backup-partition.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: backup-partition
-# Copyright (c) 2022-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2022-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: backup-script, order=70
@@ -12,6 +12,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -42,12 +43,14 @@
:if ([ $ScriptLock $ScriptName ] = false) do={
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
:if ([ :len [ /partitions/find ] ] < 2) do={
$LogPrint error $ScriptName ("Device does not have a fallback partition.");
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
@@ -56,6 +59,7 @@
:if ([ :len $ActiveRunning ] < 1) do={
$LogPrint error $ScriptName ("Device is not running from active partition.");
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
@@ -65,6 +69,7 @@
:if ([ :len $FallbackTo ] < 1) do={
$LogPrint error $ScriptName ("There is no inactive partition named '" . $FallbackToName . "'.");
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
@@ -74,6 +79,7 @@
:if (([ /terminal/inkey timeout=60 ] % 32) = 25) do={
:if ([ $CopyTo $ScriptName $FallbackTo $FallbackToName ] = false) do={
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
}
@@ -86,6 +92,7 @@
($NumInstalled & $BitMask) != ($NumLatest & $BitMask)) do={
:if ([ $CopyTo $ScriptName $FallbackTo $FallbackToName ] = false) do={
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
}
@@ -103,6 +110,9 @@
/system/scheduler/remove [ find where name="running-from-backup-partition" ];
$LogPrint error $ScriptName ("Failed saving configuration to partition '" . $FallbackToName . "'!");
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/backup-upload.rsc b/backup-upload.rsc
index 8d96eba..e050140 100644
--- a/backup-upload.rsc
+++ b/backup-upload.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: backup-upload
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: backup-script, order=50
@@ -12,6 +12,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -43,11 +44,13 @@
:if ($BackupSendBinary != true && \
$BackupSendExport != true) do={
$LogPrint error $ScriptName ("Configured to send neither backup nor config export.");
+ :set ExitOK true;
:error false;
}
:if ([ $ScriptLock $ScriptName ] = false) do={
:set PackagesUpdateBackupFailure true;
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -67,6 +70,7 @@
:if ([ $MkDir $DirName ] = false) do={
$LogPrint error $ScriptName ("Failed creating directory!");
+ :set ExitOK true;
:error false;
}
@@ -158,4 +162,6 @@
:set PackagesUpdateBackupFailure true;
}
/file/remove $DirName;
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/capsman-download-packages.capsman.rsc b/capsman-download-packages.capsman.rsc
index f2ff024..4609498 100644
--- a/capsman-download-packages.capsman.rsc
+++ b/capsman-download-packages.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: capsman-download-packages.capsman
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -25,6 +26,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -35,6 +37,7 @@
:if ([ :len $PackagePath ] = 0) do={
$LogPrint warning $ScriptName ("The CAPsMAN package path is not defined, can not download packages.");
+ :set ExitOK true;
:error false;
}
@@ -42,6 +45,7 @@
:if ([ $MkDir $PackagePath ] = false) do={
$LogPrint warning $ScriptName ("Creating directory at CAPsMAN package path (" . \
$PackagePath . ") failed!");
+ :set ExitOK true;
:error false;
}
$LogPrint info $ScriptName ("Created directory at CAPsMAN package path (" . $PackagePath . \
@@ -82,4 +86,6 @@
/caps-man/remote-cap/upgrade [ find where version!=$InstalledVersion ];
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/capsman-download-packages.template.rsc b/capsman-download-packages.template.rsc
index ad9b926..642a068 100644
--- a/capsman-download-packages.template.rsc
+++ b/capsman-download-packages.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: capsman-download-packages%TEMPL%
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -15,6 +15,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -26,6 +27,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -37,6 +39,7 @@
:if ([ :len $PackagePath ] = 0) do={
$LogPrint warning $ScriptName ("The CAPsMAN package path is not defined, can not download packages.");
+ :set ExitOK true;
:error false;
}
@@ -44,6 +47,7 @@
:if ([ $MkDir $PackagePath ] = false) do={
$LogPrint warning $ScriptName ("Creating directory at CAPsMAN package path (" . \
$PackagePath . ") failed!");
+ :set ExitOK true;
:error false;
}
$LogPrint info $ScriptName ("Created directory at CAPsMAN package path (" . $PackagePath . \
@@ -93,4 +97,6 @@
/interface/wifi/capsman/remote-cap/upgrade [ find where version!=$InstalledVersion ];
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/capsman-download-packages.wifi.rsc b/capsman-download-packages.wifi.rsc
index 056136f..1ea9b79 100644
--- a/capsman-download-packages.wifi.rsc
+++ b/capsman-download-packages.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: capsman-download-packages.wifi
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -25,6 +26,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -35,6 +37,7 @@
:if ([ :len $PackagePath ] = 0) do={
$LogPrint warning $ScriptName ("The CAPsMAN package path is not defined, can not download packages.");
+ :set ExitOK true;
:error false;
}
@@ -42,6 +45,7 @@
:if ([ $MkDir $PackagePath ] = false) do={
$LogPrint warning $ScriptName ("Creating directory at CAPsMAN package path (" . \
$PackagePath . ") failed!");
+ :set ExitOK true;
:error false;
}
$LogPrint info $ScriptName ("Created directory at CAPsMAN package path (" . $PackagePath . \
@@ -84,4 +88,6 @@
/interface/wifi/capsman/remote-cap/upgrade [ find where version!=$InstalledVersion ];
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/capsman-rolling-upgrade.capsman.rsc b/capsman-rolling-upgrade.capsman.rsc
index f287ea3..7a5ed81 100644
--- a/capsman-rolling-upgrade.capsman.rsc
+++ b/capsman-rolling-upgrade.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: capsman-rolling-upgrade.capsman
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -15,6 +15,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -22,6 +23,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -43,4 +45,6 @@
:delay ($Delay . "s");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/capsman-rolling-upgrade.template.rsc b/capsman-rolling-upgrade.template.rsc
index 3d98747..fd7e31f 100644
--- a/capsman-rolling-upgrade.template.rsc
+++ b/capsman-rolling-upgrade.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: capsman-rolling-upgrade%TEMPL%
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -16,6 +16,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -23,6 +24,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -51,4 +53,6 @@
:delay ($Delay . "s");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/capsman-rolling-upgrade.wifi.rsc b/capsman-rolling-upgrade.wifi.rsc
index 369dccc..3fb99b8 100644
--- a/capsman-rolling-upgrade.wifi.rsc
+++ b/capsman-rolling-upgrade.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: capsman-rolling-upgrade.wifi
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -15,6 +15,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -22,6 +23,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -44,4 +46,6 @@
:delay ($Delay . "s");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/certificate-renew-issued.rsc b/certificate-renew-issued.rsc
index f2c1dfe..32c3267 100644
--- a/certificate-renew-issued.rsc
+++ b/certificate-renew-issued.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: certificate-renew-issued
-# Copyright (c) 2019-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -21,6 +22,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -45,4 +47,6 @@
$LogPrint info $ScriptName ("Issued a new certificate for '" . $CertVal->"common-name" . "'.");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/certs/Makefile b/certs/Makefile
index 870cb54..9ce8dd4 100644
--- a/certs/Makefile
+++ b/certs/Makefile
@@ -22,7 +22,7 @@ DOMAINS = \
sslbl.abuse.ch/GlobalSign \
upgrade.mikrotik.com/ISRG-Root-X1 \
www.dshield.org/ISRG-Root-X1 \
- www.spamhaus.org/GTS-Root-R4
+ www.spamhaus.org/ISRG-Root-X1
.PHONY: $(DOMAINS)
diff --git a/check-certificates.rsc b/check-certificates.rsc
index 7aaac84..226364b 100644
--- a/check-certificates.rsc
+++ b/check-certificates.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: check-certificates
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -133,6 +134,7 @@
}
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -218,4 +220,6 @@
", it is invalid after " . ($CertVal->"invalid-after") . ".");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/check-health.rsc b/check-health.rsc
index 540336d..d3586db 100644
--- a/check-health.rsc
+++ b/check-health.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: check-health
-# Copyright (c) 2019-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -40,6 +41,7 @@
}
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -78,6 +80,7 @@
:if ([ :len [ /system/health/find ] ] = 0) do={
$LogPrint debug $ScriptName ("Your device does not provide any health values.");
+ :set ExitOK true;
:error true;
}
@@ -175,4 +178,6 @@
}
:set ($CheckHealthLast->$Name) $Value;
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/check-lte-firmware-upgrade.rsc b/check-lte-firmware-upgrade.rsc
index 2e52c2a..cd9f979 100644
--- a/check-lte-firmware-upgrade.rsc
+++ b/check-lte-firmware-upgrade.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: check-lte-firmware-upgrade
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -19,6 +20,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -100,4 +102,6 @@
:foreach Interface in=[ /interface/lte/find ] do={
$CheckInterface $ScriptName $Interface;
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/check-routeros-update.rsc b/check-routeros-update.rsc
index 0624808..c3d2625 100644
--- a/check-routeros-update.rsc
+++ b/check-routeros-update.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: check-routeros-update
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -34,20 +35,26 @@
:global WaitFullyConnected;
:local DoUpdate do={
+ :local ScriptName [ :tostr $1 ];
+
+ :global LogPrint;
+
:if ([ :len [ /system/script/find where name="packages-update" ] ] > 0) do={
/system/script/run packages-update;
} else={
/system/package/update/install without-paging;
}
- :error "Waiting for system to reboot.";
+ $LogPrint info $ScriptName ("Waiting for system to reboot.");
}
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
:if ([ :len [ /system/scheduler/find where name="_RebootForUpdate" ] ] > 0) do={
+ :set ExitOK true;
:error "A reboot for update is already scheduled.";
}
@@ -59,11 +66,13 @@
:if ([ $ScriptFromTerminal $ScriptName ] = true) do={
$LogPrint info $ScriptName ("System is already up to date.");
}
+ :set ExitOK true;
:error true;
}
:if ([ :len ($Update->"latest-version") ] = 0) do={
$LogPrint info $ScriptName ("Received an empty version string from server.");
+ :set ExitOK true;
:error false;
}
@@ -76,6 +85,7 @@
:if ($NumLatest < [ $VersionToNum "7.0" ]) do={
$LogPrint warning $ScriptName ("The version '" . ($Update->"latest-version") . "' is not a valid version.");
+ :set ExitOK true;
:error false;
}
@@ -87,7 +97,9 @@
subject=([ $SymbolForNotification "sparkles" ] . "RouterOS update: " . $Update->"latest-version"); \
message=("Installing ALL versions automatically, including " . $Update->"latest-version" . \
"... Updating on " . $Identity . "..."); link=$Link; silent=true });
- $DoUpdate;
+ $DoUpdate $ScriptName;
+ :set ExitOK true;
+ :error true;
}
:if ($SafeUpdatePatch = true && $NumInstalledFeature = $NumLatestFeature) do={
@@ -96,7 +108,9 @@
subject=([ $SymbolForNotification "sparkles" ] . "RouterOS update: " . $Update->"latest-version"); \
message=("Version " . $Update->"latest-version" . " is a patch update for " . $Update->"channel" . \
", updating on " . $Identity . "..."); link=$Link; silent=true });
- $DoUpdate;
+ $DoUpdate $ScriptName;
+ :set ExitOK true;
+ :error true;
}
:if ($SafeUpdateNeighbor = true) do={
@@ -110,7 +124,9 @@
subject=([ $SymbolForNotification "sparkles" ] . "RouterOS update: " . $Update->"latest-version"); \
message=("Seen a neighbor (" . $Neighbor . ") running version " . $Update->"latest-version" . \
" from " . $Update->"channel" . ", updating on " . $Identity . "..."); link=$Link; silent=true });
- $DoUpdate;
+ $DoUpdate $ScriptName;
+ :set ExitOK true;
+ :error true;
}
}
@@ -130,7 +146,9 @@
subject=([ $SymbolForNotification "sparkles" ] . "RouterOS update: " . $Update->"latest-version"); \
message=("Version " . $Update->"latest-version" . " is considered safe for " . $Update->"channel" . \
", updating on " . $Identity . "..."); link=$Link; silent=true });
- $DoUpdate;
+ $DoUpdate $ScriptName;
+ :set ExitOK true;
+ :error true;
}
}
@@ -140,13 +158,16 @@
:if (([ /terminal/inkey timeout=60 ] % 32) = 25) do={
/system/package/update/set channel=stable;
$LogPrint info $ScriptName ("Switched to channel 'stable', please re-run!");
+ :set ExitOK true;
:error true;
}
}
:put ("Do you want to install RouterOS version " . $Update->"latest-version" . "? [y/N]");
:if (([ /terminal/inkey timeout=60 ] % 32) = 25) do={
- $DoUpdate;
+ $DoUpdate $ScriptName;
+ :set ExitOK true;
+ :error true;
} else={
:put "Canceled...";
}
@@ -155,6 +176,7 @@
:if ($SentRouterosUpdateNotification = $Update->"latest-version") do={
$LogPrint info $ScriptName ("Already sent the RouterOS update notification for version " . \
$Update->"latest-version" . ".");
+ :set ExitOK true;
:error true;
}
@@ -170,6 +192,7 @@
:if ($SentRouterosUpdateNotification = $Update->"latest-version") do={
$LogPrint info $ScriptName ("Already sent the RouterOS downgrade notification for version " . \
$Update->"latest-version" . ".");
+ :set ExitOK true;
:error true;
}
@@ -182,4 +205,6 @@
" is available for downgrade.");
:set SentRouterosUpdateNotification ($Update->"latest-version");
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/collect-wireless-mac.capsman.rsc b/collect-wireless-mac.capsman.rsc
index 9efa9ef..05e4b89 100644
--- a/collect-wireless-mac.capsman.rsc
+++ b/collect-wireless-mac.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: collect-wireless-mac.capsman
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=40
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -29,6 +30,7 @@
:global SymbolForNotification;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -93,4 +95,6 @@
$LogPrint debug $ScriptName ("No mac address available... Ignoring.");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/collect-wireless-mac.local.rsc b/collect-wireless-mac.local.rsc
index 27c9d1c..67c1a98 100644
--- a/collect-wireless-mac.local.rsc
+++ b/collect-wireless-mac.local.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: collect-wireless-mac.local
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=40
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -29,6 +30,7 @@
:global SymbolForNotification;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -94,4 +96,6 @@
$LogPrint debug $ScriptName ("No mac address available... Ignoring.");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/collect-wireless-mac.template.rsc b/collect-wireless-mac.template.rsc
index d41c17d..84a9667 100644
--- a/collect-wireless-mac.template.rsc
+++ b/collect-wireless-mac.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: collect-wireless-mac%TEMPL%
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=40
@@ -15,6 +15,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -30,6 +31,7 @@
:global SymbolForNotification;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -111,4 +113,6 @@
$LogPrint debug $ScriptName ("No mac address available... Ignoring.");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/collect-wireless-mac.wifi.rsc b/collect-wireless-mac.wifi.rsc
index 0075320..fa4953b 100644
--- a/collect-wireless-mac.wifi.rsc
+++ b/collect-wireless-mac.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: collect-wireless-mac.wifi
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=40
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -29,6 +30,7 @@
:global SymbolForNotification;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -93,4 +95,6 @@
$LogPrint debug $ScriptName ("No mac address available... Ignoring.");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/daily-psk.capsman.rsc b/daily-psk.capsman.rsc
index 0562e39..f41da29 100644
--- a/daily-psk.capsman.rsc
+++ b/daily-psk.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: daily-psk.capsman
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -31,6 +32,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -89,4 +91,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/daily-psk.local.rsc b/daily-psk.local.rsc
index 0bef0e9..2920cb5 100644
--- a/daily-psk.local.rsc
+++ b/daily-psk.local.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: daily-psk.local
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -31,6 +32,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -88,4 +90,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/daily-psk.template.rsc b/daily-psk.template.rsc
index 9d71958..05c376e 100644
--- a/daily-psk.template.rsc
+++ b/daily-psk.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: daily-psk%TEMPL%
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -15,6 +15,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -32,6 +33,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -104,4 +106,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/daily-psk.wifi.rsc b/daily-psk.wifi.rsc
index 83a896c..4182ab8 100644
--- a/daily-psk.wifi.rsc
+++ b/daily-psk.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: daily-psk.wifi
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -31,6 +32,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -89,4 +91,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/dhcp-lease-comment.capsman.rsc b/dhcp-lease-comment.capsman.rsc
index c435ec3..947181b 100644
--- a/dhcp-lease-comment.capsman.rsc
+++ b/dhcp-lease-comment.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: dhcp-lease-comment.capsman
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=60
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -21,6 +22,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -36,4 +38,6 @@
/ip/dhcp-server/lease/set comment=$NewComment $Lease;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/dhcp-lease-comment.local.rsc b/dhcp-lease-comment.local.rsc
index 27e6605..27306dd 100644
--- a/dhcp-lease-comment.local.rsc
+++ b/dhcp-lease-comment.local.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: dhcp-lease-comment.local
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=60
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -21,6 +22,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -36,4 +38,6 @@
/ip/dhcp-server/lease/set comment=$NewComment $Lease;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/dhcp-lease-comment.template.rsc b/dhcp-lease-comment.template.rsc
index c562ca2..8552b26 100644
--- a/dhcp-lease-comment.template.rsc
+++ b/dhcp-lease-comment.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: dhcp-lease-comment%TEMPL%
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=60
@@ -15,6 +15,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -22,6 +23,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -41,4 +43,6 @@
/ip/dhcp-server/lease/set comment=$NewComment $Lease;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/dhcp-lease-comment.wifi.rsc b/dhcp-lease-comment.wifi.rsc
index ba617d7..bf67bd0 100644
--- a/dhcp-lease-comment.wifi.rsc
+++ b/dhcp-lease-comment.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: dhcp-lease-comment.wifi
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=60
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -21,6 +22,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -36,4 +38,6 @@
/ip/dhcp-server/lease/set comment=$NewComment $Lease;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/dhcp-to-dns.rsc b/dhcp-to-dns.rsc
index 9bf506f..1eb832a 100644
--- a/dhcp-to-dns.rsc
+++ b/dhcp-to-dns.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: dhcp-to-dns
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=20
@@ -12,6 +12,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -27,6 +28,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -123,4 +125,6 @@
$LogPrint debug $ScriptName ("No address available... Ignoring.");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/doc/mod/notification-ntfy.md b/doc/mod/notification-ntfy.md
index 5393d44..04dee35 100644
--- a/doc/mod/notification-ntfy.md
+++ b/doc/mod/notification-ntfy.md
@@ -52,6 +52,8 @@ basic authentication. Configure `NtfyServerUser` and `NtfyServerPass` for this.
Even authentication via access token is possible, adding it as password with
a blank username.
+Also available is `NtfyServerToken` to add a bearer token for authentication.
+
For a custom service installing an additional certificate may be required.
You may want to install that certificate manually, after finding the
[certificate name from browser](../../CERTIFICATES.md).
diff --git a/doc/netwatch-dns.md b/doc/netwatch-dns.md
index cdfbd97..6d2c865 100644
--- a/doc/netwatch-dns.md
+++ b/doc/netwatch-dns.md
@@ -4,7 +4,7 @@ Manage DNS and DoH servers from netwatch
[![GitHub stars](https://img.shields.io/github/stars/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=red)](https://github.com/eworm-de/routeros-scripts/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=green)](https://github.com/eworm-de/routeros-scripts/network)
[![GitHub watchers](https://img.shields.io/github/watchers/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=blue)](https://github.com/eworm-de/routeros-scripts/watchers)
-[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.14-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
+[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.16-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
[![Telegram group @routeros_scripts](https://img.shields.io/badge/Telegram-%40routeros__scripts-%2326A5E4?logo=telegram&style=flat)](https://t.me/routeros_scripts)
[![donate with PayPal](https://img.shields.io/badge/Like_it%3F-Donate!-orange?logo=githubsponsors&logoColor=orange&style=flat)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A4ZXBD6YS2W8J)
diff --git a/firmware-upgrade-reboot.rsc b/firmware-upgrade-reboot.rsc
index 74847ac..f9e557c 100644
--- a/firmware-upgrade-reboot.rsc
+++ b/firmware-upgrade-reboot.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: firmware-upgrade-reboot
-# Copyright (c) 2022-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2022-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -19,6 +20,7 @@
:global VersionToNum;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -26,10 +28,12 @@
:if ($RouterBoard->"current-firmware" = $RouterBoard->"upgrade-firmware") do={
$LogPrint info $ScriptName ("Current and upgrade firmware match with version " . \
$RouterBoard->"current-firmware" . ".");
+ :set ExitOK true;
:error true;
}
:if ([ $VersionToNum ($RouterBoard->"current-firmware") ] > [ $VersionToNum ($RouterBoard->"upgrade-firmware") ]) do={
$LogPrint info $ScriptName ("Different firmware version is available, but it is a downgrade. Ignoring.");
+ :set ExitOK true;
:error true;
}
@@ -51,4 +55,6 @@
$LogPrint info $ScriptName ("Firmware upgrade successful, rebooting.");
/system/reboot;
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/fw-addr-lists.rsc b/fw-addr-lists.rsc
index 34b2fcc..e98a610 100644
--- a/fw-addr-lists.rsc
+++ b/fw-addr-lists.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: fw-addr-lists
-# Copyright (c) 2023-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2023-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.16
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -36,6 +37,7 @@
}
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -90,7 +92,9 @@
:set Line ($Line->0);
:local Address;
:if ([ :pick $Line 0 1 ] = "{") do={
- :set Address [ :tostr ([ :deserialize from=json $Line ]->"cidr") ];
+ :do {
+ :set Address [ :tostr ([ :deserialize from=json $Line ]->"cidr") ];
+ } on-error={ }
} else={
:set Address ([ :pick $Line 0 [ $FindDelim $Line ] ] . ($List->"cidr"));
}
@@ -184,4 +188,6 @@
" - renewed: " . [ $HumanReadableNum $CntRenew 1000 ] . \
" - removed: " . [ $HumanReadableNum $CntRemove 1000 ]);
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/global-config-overlay.rsc b/global-config-overlay.rsc
index 9ffd90c..227ae5a 100644
--- a/global-config-overlay.rsc
+++ b/global-config-overlay.rsc
@@ -1,5 +1,5 @@
# Overlay for global configuration by RouterOS Scripts
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# global configuration, custom overlay
diff --git a/global-config.rsc b/global-config.rsc
index 2ed67f3..1f4e9ca 100644
--- a/global-config.rsc
+++ b/global-config.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: global-config
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# global configuration
@@ -58,6 +58,7 @@
:global NtfyServer "ntfy.sh";
:global NtfyServerUser [];
:global NtfyServerPass [];
+:global NtfyServerToken [];
:global NtfyTopic "";
# It is possible to override e-mail, Telegram, Matrix and Ntfy setting
@@ -106,9 +107,9 @@
{ url="https://lists.blocklist.de/lists/strongips.txt";
cert="Certum Trusted Network CA" };
# { url="https://www.spamhaus.org/drop/drop_v4.json";
-# cert="GTS Root R4" };
+# cert="ISRG Root X1" };
# { url="https://www.spamhaus.org/drop/drop_v6.json";
-# cert="GTS Root R4" };
+# cert="ISRG Root X1" };
};
# "mikrotik"={
# { url="https://git.eworm.de/cgit/routeros-scripts/plain/fw-addr-lists.d/mikrotik";
@@ -186,7 +187,7 @@
# Run different commands with multiple mode-button presses.
:global ModeButton {
- 1="/system/script/run leds-toggle-mode;";
+ 1="/system/leds/settings/set all-leds-off=(({ \"never\"=\"immediate\"; \"immediate\"=\"never\" })->[ get all-leds-off ]);";
2=":global Identity; :global SendNotification; :global SymbolForNotification; \$SendNotification ([ \$SymbolForNotification \"earth\" ] . \"Hello...\") (\"Hello world, \" . \$Identity . \" calling!\");";
3="/system/shutdown;";
4="/system/reboot;";
diff --git a/global-functions.rsc b/global-functions.rsc
index 47a69c4..a2dd279 100644
--- a/global-functions.rsc
+++ b/global-functions.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: global-functions
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -32,6 +32,7 @@
:global DownloadPackage;
:global EitherOr;
:global EscapeForRegEx;
+:global ExitError;
:global FetchHuge;
:global FetchUserAgentStr;
:global FormatLine;
@@ -425,11 +426,25 @@
:return $Return;
}
+# simple macro to print error message on unintentional error
+:set ExitError do={
+ :local ExitOK [ :tostr $1 ];
+ :local Name [ :tostr $2 ];
+
+ :global IfThenElse;
+ :global LogPrint;
+
+ :if ($ExitOK = "false") do={
+ $LogPrint error $Name ([ $IfThenElse ([ :pick $Name 0 1 ] = "\$") \
+ "Function" "Script" ] . " '" . $Name . "' exited with error.");
+ }
+}
+
# fetch huge data to file, read in chunks
:set FetchHuge do={
- :local ScriptName [ :tostr $1 ];
- :local Url [ :tostr $2 ];
- :local CheckCert [ :tobool $3 ];
+ :local ScriptName [ :tostr $1 ];
+ :local Url [ :tostr $2 ];
+ :local CheckCert [ :tostr $3 ];
:global CleanName;
:global FetchUserAgentStr;
@@ -439,7 +454,7 @@
:global MkDir;
:global WaitForFile;
- :set CheckCert [ $IfThenElse ($CheckCert = false) "no" "yes-without-crl" ];
+ :set CheckCert [ $IfThenElse ($CheckCert = "false") "no" "yes-without-crl" ];
:local DirName ("tmpfs/" . [ $CleanName $ScriptName ]);
:if ([ $MkDir $DirName ] = false) do={
@@ -464,9 +479,13 @@
:local FileSize [ /file/get $FileName size ];
:local Return "";
:local VarSize 0;
- :while ($VarSize < $FileSize) do={
+ :while ($VarSize != $FileSize) do={
:set Return ($Return . ([ /file/read offset=$VarSize chunk-size=32768 file=$FileName as-value ]->"data"));
+ :set FileSize [ /file/get $FileName size ];
:set VarSize [ :len $Return ];
+ :if ($VarSize > $FileSize) do={
+ :delay 100ms;
+ }
}
/file/remove $DirName;
:return $Return;
@@ -904,14 +923,24 @@
# parse key value store
:set ParseKeyValueStore do={
:local Source $1;
+
+ :if ([ :pick $Source 0 1 ] = "{") do={
+ :do {
+ :return [ :deserialize from=json $Source ];
+ } on-error={ }
+ }
+
:if ([ :typeof $Source ] != "array") do={
:set Source [ :tostr $1 ];
}
:local Result ({});
:foreach KeyValue in=[ :toarray $Source ] do={
:if ([ :find $KeyValue "=" ]) do={
- :set ($Result->[ :pick $KeyValue 0 [ :find $KeyValue "=" ] ]) \
- [ :pick $KeyValue ([ :find $KeyValue "=" ] + 1) [ :len $KeyValue ] ];
+ :local Key [ :pick $KeyValue 0 [ :find $KeyValue "=" ] ];
+ :local Value [ :pick $KeyValue ([ :find $KeyValue "=" ] + 1) [ :len $KeyValue ] ];
+ :if ($Value="true") do={ :set Value true; }
+ :if ($Value="false") do={ :set Value false; }
+ :set ($Result->$Key) $Value;
} else={
:set ($Result->$KeyValue) true;
}
@@ -1003,7 +1032,7 @@
}
# install new scripts, update existing scripts
-:set ScriptInstallUpdate do={
+:set ScriptInstallUpdate do={ :do {
:local Scripts [ :toarray $1 ];
:local NewComment [ :tostr $2 ];
@@ -1222,7 +1251,9 @@
:set GlobalConfigChanges;
:set GlobalConfigMigration;
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# lock script against multiple invocation
:set ScriptLock do={
@@ -1357,11 +1388,13 @@
}
# send notification via NotificationFunctions - expects at least two string arguments
-:set SendNotification do={
+:set SendNotification do={ :do {
:global SendNotification2;
$SendNotification2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 });
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via NotificationFunctions - expects one array argument
:set SendNotification2 do={
diff --git a/global-wait.rsc b/global-wait.rsc
index f0631e2..529dbd7 100644
--- a/global-wait.rsc
+++ b/global-wait.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: global-wait
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
diff --git a/gps-track.rsc b/gps-track.rsc
index a2ea9ff..1bd976a 100644
--- a/gps-track.rsc
+++ b/gps-track.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: gps-track
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -23,6 +24,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
$WaitFullyConnected;
@@ -45,4 +47,6 @@
} else={
$LogPrint debug $ScriptName ("GPS data not valid.");
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/hotspot-to-wpa-cleanup.capsman.rsc b/hotspot-to-wpa-cleanup.capsman.rsc
index e935850..1d27faf 100644
--- a/hotspot-to-wpa-cleanup.capsman.rsc
+++ b/hotspot-to-wpa-cleanup.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: hotspot-to-wpa-cleanup.capsman
-# Copyright (c) 2021-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2021-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=80
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -23,6 +24,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -72,4 +74,6 @@
/ip/dhcp-server/lease/remove $Lease;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/hotspot-to-wpa-cleanup.template.rsc b/hotspot-to-wpa-cleanup.template.rsc
index fa99b5d..f92dbe5 100644
--- a/hotspot-to-wpa-cleanup.template.rsc
+++ b/hotspot-to-wpa-cleanup.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: hotspot-to-wpa-cleanup%TEMPL%
-# Copyright (c) 2021-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2021-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=80
@@ -15,6 +15,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -24,6 +25,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -79,4 +81,6 @@
/ip/dhcp-server/lease/remove $Lease;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/hotspot-to-wpa-cleanup.wifi.rsc b/hotspot-to-wpa-cleanup.wifi.rsc
index d3f859e..cd21593 100644
--- a/hotspot-to-wpa-cleanup.wifi.rsc
+++ b/hotspot-to-wpa-cleanup.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: hotspot-to-wpa-cleanup.wifi
-# Copyright (c) 2021-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2021-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# provides: lease-script, order=80
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -23,6 +24,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -72,4 +74,6 @@
/ip/dhcp-server/lease/remove $Lease;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/hotspot-to-wpa.capsman.rsc b/hotspot-to-wpa.capsman.rsc
index b85c591..d962ba7 100644
--- a/hotspot-to-wpa.capsman.rsc
+++ b/hotspot-to-wpa.capsman.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: hotspot-to-wpa.capsman
-# Copyright (c) 2019-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -13,6 +13,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -25,11 +26,13 @@
:local UserName $username;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ :typeof $MacAddress ] = "nothing" || [ :typeof $UserName ] = "nothing") do={
$LogPrint error $ScriptName ("This script is supposed to run from hotspot on login.");
+ :set ExitOK true;
:error false;
}
@@ -57,6 +60,7 @@
:if ($Template->"action" = "reject") do={
$LogPrint info $ScriptName ("Ignoring login for hotspot '" . $Hotspot . "'.");
+ :set ExitOK true;
:error true;
}
@@ -95,4 +99,6 @@
:delay 2s;
/caps-man/access-list/set $Entry action=accept;
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/hotspot-to-wpa.template.rsc b/hotspot-to-wpa.template.rsc
index 44607cc..3438be7 100644
--- a/hotspot-to-wpa.template.rsc
+++ b/hotspot-to-wpa.template.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: hotspot-to-wpa%TEMPL%
-# Copyright (c) 2019-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -14,6 +14,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -26,11 +27,13 @@
:local UserName $username;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ :typeof $MacAddress ] = "nothing" || [ :typeof $UserName ] = "nothing") do={
$LogPrint error $ScriptName ("This script is supposed to run from hotspot on login.");
+ :set ExitOK true;
:error false;
}
@@ -64,6 +67,7 @@
:if ($Template->"action" = "reject") do={
$LogPrint info $ScriptName ("Ignoring login for hotspot '" . $Hotspot . "'.");
+ :set ExitOK true;
:error true;
}
@@ -115,4 +119,6 @@
:delay 2s;
/caps-man/access-list/set $Entry action=accept;
/interface/wifi/access-list/set $Entry action=accept;
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/hotspot-to-wpa.wifi.rsc b/hotspot-to-wpa.wifi.rsc
index 25933c6..a2bb3ca 100644
--- a/hotspot-to-wpa.wifi.rsc
+++ b/hotspot-to-wpa.wifi.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: hotspot-to-wpa.wifi
-# Copyright (c) 2019-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -13,6 +13,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -25,11 +26,13 @@
:local UserName $username;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ :typeof $MacAddress ] = "nothing" || [ :typeof $UserName ] = "nothing") do={
$LogPrint error $ScriptName ("This script is supposed to run from hotspot on login.");
+ :set ExitOK true;
:error false;
}
@@ -57,6 +60,7 @@
:if ($Template->"action" = "reject") do={
$LogPrint info $ScriptName ("Ignoring login for hotspot '" . $Hotspot . "'.");
+ :set ExitOK true;
:error true;
}
@@ -92,4 +96,6 @@
:delay 2s;
/interface/wifi/access-list/set $Entry action=accept;
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/ip-addr-bridge.rsc b/ip-addr-bridge.rsc
index 758cd46..00b45a3 100644
--- a/ip-addr-bridge.rsc
+++ b/ip-addr-bridge.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: ip-addr-bridge
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# enable or disable ip addresses based on bridge port state
diff --git a/ipsec-to-dns.rsc b/ipsec-to-dns.rsc
index bd74a8f..39b21d5 100644
--- a/ipsec-to-dns.rsc
+++ b/ipsec-to-dns.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: ipsec-to-dns
-# Copyright (c) 2021-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2021-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -26,6 +27,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -76,4 +78,6 @@
/ip/dns/static/add name=$Fqdn address=($PeerVal->"dynamic-address") ttl=$Ttl comment=$Comment place-before=$PlaceBefore;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/ipv6-update.rsc b/ipv6-update.rsc
index ccc0eb9..a2fb831 100644
--- a/ipv6-update.rsc
+++ b/ipv6-update.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: ipv6-update
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -22,16 +23,19 @@
:local PdPrefix $"pd-prefix";
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ :typeof $NaAddress ] = "str") do={
$LogPrint info $ScriptName ("An address (" . $NaAddress . ") was acquired, not a prefix. Ignoring.");
+ :set ExitOK true;
:error false;
}
:if ([ :typeof $PdPrefix ] = "nothing") do={
$LogPrint error $ScriptName ("This script is supposed to run from ipv6 dhcp-client.");
+ :set ExitOK true;
:error false;
}
@@ -90,4 +94,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/lease-script.rsc b/lease-script.rsc
index f484414..3d0fc72 100644
--- a/lease-script.rsc
+++ b/lease-script.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: lease-script
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -25,6 +26,7 @@
[ :typeof $leaseServerName ] = "nothing" || \
[ :typeof $leaseBound ] = "nothing") do={
$LogPrint error $ScriptName ("This script is supposed to run from ip dhcp-server.");
+ :set ExitOK true;
:error false;
}
@@ -32,11 +34,13 @@
"de" "" ] . "assigned lease " . $leaseActIP . " to " . $leaseActMAC);
:if ([ $ScriptLock $ScriptName 10 ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ :len [ /system/script/job/find where script=$ScriptName ] ] > 1) do={
$LogPrint debug $ScriptName ("More invocations are waiting, exiting early.");
+ :set ExitOK true;
:error true;
}
@@ -56,4 +60,6 @@
$LogPrint warning $ScriptName ("Running script '" . $Script . "' failed!");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/leds-day-mode.rsc b/leds-day-mode.rsc
index b7c6b5b..e0f08d6 100644
--- a/leds-day-mode.rsc
+++ b/leds-day-mode.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: leds-day-mode
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# enable LEDs
diff --git a/leds-night-mode.rsc b/leds-night-mode.rsc
index fb7c7a2..1f50dfd 100644
--- a/leds-night-mode.rsc
+++ b/leds-night-mode.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: leds-night-mode
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# disable LEDs
diff --git a/leds-toggle-mode.rsc b/leds-toggle-mode.rsc
index 136c9d1..55d5b82 100644
--- a/leds-toggle-mode.rsc
+++ b/leds-toggle-mode.rsc
@@ -1,13 +1,9 @@
#!rsc by RouterOS
# RouterOS script: leds-toggle-mode
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# toggle LEDs mode
# https://git.eworm.de/cgit/routeros-scripts/about/doc/leds-mode.md
-:if ([ /system/leds/settings/get all-leds-off ] = "never") do={
- /system/leds/settings/set all-leds-off=immediate;
-} else={
- /system/leds/settings/set all-leds-off=never;
-}
+/system/leds/settings/set all-leds-off=(({ "never"="immediate"; "immediate"="never" })->[ get all-leds-off ]);
diff --git a/log-forward.rsc b/log-forward.rsc
index e0d8f35..8c2ebc0 100644
--- a/log-forward.rsc
+++ b/log-forward.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: log-forward
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -33,6 +34,7 @@
:global SymbolForNotification;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -43,6 +45,7 @@
:if ($LogForwardRateLimit > 30) do={
:set LogForwardRateLimit ($LogForwardRateLimit - 1);
$LogPrint info $ScriptName ("Rate limit in action, not forwarding logs, if any!");
+ :set ExitOK true;
:error false;
}
@@ -100,4 +103,6 @@
:local LogAll [ /log/find ];
:set LogForwardLast ($LogAll->([ :len $LogAll ] - 1) );
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/mod/bridge-port-to.rsc b/mod/bridge-port-to.rsc
index 7dae679..ec6f612 100644
--- a/mod/bridge-port-to.rsc
+++ b/mod/bridge-port-to.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/bridge-port-to
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -10,7 +10,7 @@
:global BridgePortTo;
-:set BridgePortTo do={
+:set BridgePortTo do={ :do {
:local BridgePortTo [ :tostr $1 ];
:global IfThenElse;
@@ -65,4 +65,6 @@
$LogPrint info $0 ("Re-enabling interfaces...");
/interface/ethernet/enable $InterfaceReEnable;
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
diff --git a/mod/bridge-port-vlan.rsc b/mod/bridge-port-vlan.rsc
index c9f55ae..6221646 100644
--- a/mod/bridge-port-vlan.rsc
+++ b/mod/bridge-port-vlan.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/bridge-port-vlan
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -10,7 +10,7 @@
:global BridgePortVlan;
-:global BridgePortVlan do={
+:global BridgePortVlan do={ :do {
:local ConfigTo [ :tostr $1 ];
:global IfThenElse;
@@ -74,4 +74,6 @@
$LogPrint info $0 ("Re-enabling interfaces...");
/interface/ethernet/enable $InterfaceReEnable;
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
diff --git a/mod/inspectvar.rsc b/mod/inspectvar.rsc
index 73205b2..01724bb 100644
--- a/mod/inspectvar.rsc
+++ b/mod/inspectvar.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/inspectvar
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -12,11 +12,13 @@
:global InspectVarReturn;
# inspect variable and print on terminal
-:set InspectVar do={
+:set InspectVar do={ :do {
:global InspectVarReturn;
:put [ :tocrlf [ $InspectVarReturn $1 ] ];
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# inspect variable and return formatted string
:set InspectVarReturn do={
diff --git a/mod/ipcalc.rsc b/mod/ipcalc.rsc
index 003bdc3..69dec8b 100644
--- a/mod/ipcalc.rsc
+++ b/mod/ipcalc.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/ipcalc
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -12,7 +12,7 @@
:global IPCalcReturn;
# print netmask, network, min host, max host and broadcast
-:set IPCalc do={
+:set IPCalc do={ :do {
:local Input [ :tostr $1 ];
:global FormatLine;
@@ -27,7 +27,9 @@
[ $FormatLine "HostMin" ($Values->"hostmin") ] . "\n" . \
[ $FormatLine "HostMax" ($Values->"hostmax") ] . "\n" . \
[ $FormatLine "Broadcast" ($Values->"broadcast") ]) ];
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# calculate and return netmask, network, min host, max host and broadcast
:set IPCalcReturn do={
diff --git a/mod/notification-email.rsc b/mod/notification-email.rsc
index 3d62ddf..6d700f5 100644
--- a/mod/notification-email.rsc
+++ b/mod/notification-email.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/notification-email
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -34,7 +34,7 @@
}
# flush e-mail queue
-:set FlushEmailQueue do={
+:set FlushEmailQueue do={ :do {
:global EmailQueue;
:global EitherOr;
@@ -47,7 +47,24 @@
:local QueueLen [ :len $EmailQueue ];
:local Scheduler [ /system/scheduler/find where name="_FlushEmailQueue" ];
- :if ([ :len $Scheduler ] > 0 && [ /system/scheduler/get $Scheduler interval ] < 1m) do={
+ :if ([ :len $Scheduler ] > 0 && $QueueLen = 0) do={
+ $LogPrint warning $0 ("Flushing E-Mail messages from scheduler, but queue is empty.");
+ /system/scheduler/remove $Scheduler;
+ :return false;
+ }
+
+ :if ($QueueLen = 0) do={
+ :return true;
+ }
+
+ :if ([ :len $Scheduler ] < 0) do={
+ /system/scheduler/add name="_FlushEmailQueue" interval=1m start-time=startup \
+ comment="Doing initial checks..." on-event=(":global FlushEmailQueue; \$FlushEmailQueue;");
+ :set Scheduler [ /system/scheduler/find where name="_FlushEmailQueue" ];
+ }
+
+ :local SchedVal [ /system/scheduler/get $Scheduler ];
+ :if (($SchedVal->"interval") < 1m) do={
/system/scheduler/set interval=1m comment="Doing initial checks..." $Scheduler;
}
@@ -67,11 +84,7 @@
:return false;
}
- :if ([ :len $Scheduler ] > 0 && $QueueLen = 0) do={
- $LogPrint warning $0 ("Flushing E-Mail messages from scheduler, but queue is empty.");
- }
-
- /system/scheduler/set interval=([ $EitherOr $QueueLen 1 ] . "m") comment="Sending..." $Scheduler;
+ /system/scheduler/set interval=($QueueLen . "m") comment="Sending..." $Scheduler;
:foreach Id,Message in=$EmailQueue do={
:if ([ :typeof $Message ] = "array" ) do={
@@ -110,10 +123,20 @@
:if ($AllDone = true && $QueueLen = [ :len $EmailQueue ]) do={
/system/scheduler/remove $Scheduler;
:set EmailQueue;
- } else={
- /system/scheduler/set interval=1m comment="Waiting for retry..." $Scheduler;
+ :return true;
}
-}
+
+ :if ([ :len [ /system/scheduler/find where name="_FlushEmailQueue" ] ] = 0 && \
+ [ :typeof $EmailQueue ] = "nothing") do={
+ $LogPrint info $0 ("Queue was purged? Exiting.");
+ :return false;
+ }
+
+ /system/scheduler/set interval=(($SchedVal->"run-count") . "m") \
+ comment="Waiting for retry..." $Scheduler;
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# generate filter for log-forward
:set LogForwardFilterLogForwarding do={
@@ -224,11 +247,13 @@
}
# send notification via e-mail - expects at least two string arguments
-:set SendEMail do={
+:set SendEMail do={ :do {
:global SendEMail2;
$SendEMail2 ({ origin=$0; subject=$1; message=$2; link=$3 });
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via e-mail - expects one array argument
:set SendEMail2 do={
diff --git a/mod/notification-matrix.rsc b/mod/notification-matrix.rsc
index 3adc1df..aad8b42 100644
--- a/mod/notification-matrix.rsc
+++ b/mod/notification-matrix.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/notification-matrix
-# Copyright (c) 2013-2024 Michael Gisbers <michael@gisbers.de>
+# Copyright (c) 2013-2025 Michael Gisbers <michael@gisbers.de>
# Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -18,7 +18,7 @@
:global SetupMatrixJoinRoom;
# flush Matrix queue
-:set FlushMatrixQueue do={
+:set FlushMatrixQueue do={ :do {
:global MatrixQueue;
:global IsFullyConnected;
@@ -57,7 +57,9 @@
/system/scheduler/remove [ find where name="_FlushMatrixQueue" ];
:set MatrixQueue;
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via Matrix - expects one array argument
:set ($NotificationFunctions->"matrix") do={
@@ -164,11 +166,13 @@
}
# send notification via Matrix - expects at least two string arguments
-:set SendMatrix do={
+:set SendMatrix do={ :do {
:global SendMatrix2;
$SendMatrix2 ({ origin=$0; subject=$1; message=$2; link=$3 });
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via Matrix - expects one array argument
:set SendMatrix2 do={
diff --git a/mod/notification-ntfy.rsc b/mod/notification-ntfy.rsc
index b2bb280..53ba9b4 100644
--- a/mod/notification-ntfy.rsc
+++ b/mod/notification-ntfy.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/notification-ntfy
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -15,7 +15,7 @@
:global SendNtfy2;
# flush ntfy queue
-:set FlushNtfyQueue do={
+:set FlushNtfyQueue do={ :do {
:global NtfyQueue;
:global NtfyMessageIDs;
@@ -39,7 +39,7 @@
:do {
/tool/fetch check-certificate=yes-without-crl output=none http-method=post \
http-header-field=($Message->"headers") http-data=($Message->"text") \
- ($Message->"url") user=($Message->"user") password=($Message->"pass") as-value;
+ ($Message->"url") as-value;
:set ($NtfyQueue->$Id);
} on-error={
$LogPrint debug $0 ("Sending queued Ntfy message failed.");
@@ -52,7 +52,9 @@
/system/scheduler/remove [ find where name="_FlushNtfyQueue" ];
:set NtfyQueue;
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via ntfy - expects one array argument
:set ($NotificationFunctions->"ntfy") do={
@@ -65,6 +67,8 @@
:global NtfyServerOverride;
:global NtfyServerPass;
:global NtfyServerPassOverride;
+ :global NtfyServerToken;
+ :global NtfyServerTokenOverride;
:global NtfyServerUser;
:global NtfyServerUserOverride;
:global NtfyTopic;
@@ -81,6 +85,7 @@
:local Server [ $EitherOr ($NtfyServerOverride->($Notification->"origin")) $NtfyServer ];
:local User [ $EitherOr ($NtfyServerUserOverride->($Notification->"origin")) $NtfyServerUser ];
:local Pass [ $EitherOr ($NtfyServerPassOverride->($Notification->"origin")) $NtfyServerPass ];
+ :local Token [ $EitherOr ($NtfyServerTokenOverride->($Notification->"origin")) $NtfyServerToken ];
:local Topic [ $EitherOr ($NtfyTopicOverride->($Notification->"origin")) $NtfyTopic ];
:if ([ :len $Topic ] = 0) do={
@@ -91,6 +96,12 @@
:local Headers ({ [ $FetchUserAgentStr ($Notification->"origin") ]; \
("Priority: " . [ $IfThenElse ($Notification->"silent") "low" "default" ]); \
("Title: " . "[" . $IdentityExtra . $Identity . "] " . ($Notification->"subject")) });
+ :if ([ :len $User ] > 0 || [ :len $Pass ] > 0) do={
+ :set Headers ($Headers, ("Authorization: Basic " . [ :convert to=base64 ($User . ":" . $Pass) ]));
+ }
+ :if ([ :len $Token ] > 0) do={
+ :set Headers ($Headers, ("Authorization: Bearer " . $Token));
+ }
:local Text (($Notification->"message") . "\n");
:if ([ :len ($Notification->"link") ] > 0) do={
:set Text ($Text . "\n" . [ $SymbolForNotification "link" ] . ($Notification->"link"));
@@ -104,7 +115,7 @@
}
}
/tool/fetch check-certificate=yes-without-crl output=none http-method=post \
- http-header-field=$Headers http-data=$Text $Url user=$User password=$Pass as-value;
+ http-header-field=$Headers http-data=$Text $Url as-value;
} on-error={
$LogPrint info $0 ("Failed sending ntfy notification! Queuing...");
@@ -115,7 +126,7 @@
"This message was queued since " . [ /system/clock/get date ] . " " . \
[ /system/clock/get time ] . " and may be obsolete.");
:set ($NtfyQueue->[ :len $NtfyQueue ]) \
- { url=$Url; user=$User; pass=$Pass; headers=$Headers; text=$Text };
+ { url=$Url; headers=$Headers; text=$Text };
:if ([ :len [ /system/scheduler/find where name="_FlushNtfyQueue" ] ] = 0) do={
/system/scheduler/add name="_FlushNtfyQueue" interval=1m start-time=startup \
on-event=(":global FlushNtfyQueue; \$FlushNtfyQueue;");
@@ -132,11 +143,13 @@
}
# send notification via ntfy - expects at least two string arguments
-:set SendNtfy do={
+:set SendNtfy do={ :do {
:global SendNtfy2;
$SendNtfy2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 });
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via ntfy - expects one array argument
:set SendNtfy2 do={
diff --git a/mod/notification-telegram.rsc b/mod/notification-telegram.rsc
index 671bd1c..f9700cf 100644
--- a/mod/notification-telegram.rsc
+++ b/mod/notification-telegram.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/notification-telegram
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -15,7 +15,7 @@
:global SendTelegram2;
# flush telegram queue
-:set FlushTelegramQueue do={
+:set FlushTelegramQueue do={ :do {
:global TelegramQueue;
:global TelegramMessageIDs;
@@ -56,7 +56,9 @@
/system/scheduler/remove [ find where name="_FlushTelegramQueue" ];
:set TelegramQueue;
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via telegram - expects one array argument
:set ($NotificationFunctions->"telegram") do={
@@ -180,11 +182,13 @@
}
# send notification via telegram - expects at least two string arguments
-:set SendTelegram do={
+:set SendTelegram do={ :do {
:global SendTelegram2;
$SendTelegram2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 });
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# send notification via telegram - expects one array argument
:set SendTelegram2 do={
diff --git a/mod/scriptrunonce.rsc b/mod/scriptrunonce.rsc
index 3d5dce9..7e01e72 100644
--- a/mod/scriptrunonce.rsc
+++ b/mod/scriptrunonce.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/scriptrunonece
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,7 +11,7 @@
:global ScriptRunOnce;
# fetch and run script(s) once
-:set ScriptRunOnce do={
+:set ScriptRunOnce do={ :do {
:local Scripts [ :toarray $1 ];
:global ScriptRunOnceBaseUrl;
@@ -49,4 +49,6 @@
}
}
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
diff --git a/mod/ssh-keys-import.rsc b/mod/ssh-keys-import.rsc
index c7b2788..ad3a81e 100644
--- a/mod/ssh-keys-import.rsc
+++ b/mod/ssh-keys-import.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mod/ssh-keys-import
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.16
@@ -12,7 +12,7 @@
:global SSHKeysImportFile;
# import single key passed as string
-:set SSHKeysImport do={
+:set SSHKeysImport do={ :do {
:local Key [ :tostr $1 ];
:local User [ :tostr $2 ];
@@ -64,10 +64,12 @@
/file/remove "tmpfs/ssh-keys-import";
:return false;
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
# import keys from a file
-:set SSHKeysImportFile do={
+:set SSHKeysImportFile do={ :do {
:local FileName [ :tostr $1 ];
:local User [ :tostr $2 ];
@@ -106,4 +108,6 @@
$LogPrint warning $0 ("SSH key of type '" . $KeyVal->0 . "' is not supported.");
}
}
-}
+} on-error={
+ :global ExitError; $ExitError false $0;
+} }
diff --git a/mode-button.rsc b/mode-button.rsc
index 3bd922b..f8bd7b8 100644
--- a/mode-button.rsc
+++ b/mode-button.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: mode-button
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -24,7 +25,9 @@
:if ([ :len $Scheduler ] = 0) do={
$LogPrint info $ScriptName ("Creating scheduler _ModeButtonScheduler, counting presses...");
- :global ModeButtonScheduler do={
+ :global ModeButtonScheduler do={ :do {
+ :local FuncName $0;
+
:global ModeButton;
:global LogPrint;
@@ -53,7 +56,7 @@
:if ([ :len $Code ] > 0) do={
:if ([ $ValidateSyntax $Code ] = true) do={
- $LogPrint info $0 ("Acting on " . $Count . " mode-button presses: " . $Code);
+ $LogPrint info $FuncName ("Acting on " . $Count . " mode-button presses: " . $Code);
:for I from=1 to=$Count do={
$LEDInvert;
@@ -68,19 +71,25 @@
:do {
[ :parse $Code ];
} on-error={
- $LogPrint warning $0 ("The code for " . $Count . " mode-button presses failed with runtime error!");
+ $LogPrint warning $FuncName \
+ ("The code for " . $Count . " mode-button presses failed with runtime error!");
}
} else={
- $LogPrint warning $0 ("The code for " . $Count . " mode-button presses failed syntax validation!");
+ $LogPrint warning $FuncName \
+ ("The code for " . $Count . " mode-button presses failed syntax validation!");
}
} else={
- $LogPrint info $0 ("No action defined for " . $Count . " mode-button presses.");
+ $LogPrint info $FuncName ("No action defined for " . $Count . " mode-button presses.");
}
- }
+ } on-error={
+ :global ExitError; $ExitError false $0;
+ } }
/system/scheduler/add name="_ModeButtonScheduler" \
on-event=":global ModeButtonScheduler; \$ModeButtonScheduler;" interval=3s;
} else={
$LogPrint debug $ScriptName ("Updating scheduler _ModeButtonScheduler...");
/system/scheduler/set $Scheduler start-time=[ /system/clock/get time ];
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/netwatch-dns.rsc b/netwatch-dns.rsc
index 09d471d..81f9d95 100644
--- a/netwatch-dns.rsc
+++ b/netwatch-dns.rsc
@@ -1,9 +1,9 @@
#!rsc by RouterOS
# RouterOS script: netwatch-dns
-# Copyright (c) 2022-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2022-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
-# requires RouterOS, version=7.14
+# requires RouterOS, version=7.16
#
# monitor and manage dns/doh with netwatch
# https://git.eworm.de/cgit/routeros-scripts/about/doc/netwatch-dns.md
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -24,12 +25,14 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:local SettleTime (5m30s - [ /system/resource/get uptime ]);
:if ($SettleTime > 0s) do={
$LogPrint info $ScriptName ("System just booted, giving netwatch " . $SettleTime . " to settle.");
+ :set ExitOK true;
:error true;
}
@@ -80,7 +83,7 @@
:local HostVal [ /tool/netwatch/get $Host ];
:local HostInfo [ $ParseKeyValueStore ($HostVal->"comment") ];
:local HostName [ /ip/dns/static/find where name address=($HostVal->"host") \
- (!type or type="A" or type="AAAA") !disabled !dynamic ];
+ (type="A" or type="AAAA") !disabled !dynamic ];
:if ([ :len $HostName ] > 0) do={
:set HostName [ /ip/dns/static/get ($HostName->0) name ];
}
@@ -92,6 +95,7 @@
:if ($DohCurrent = $HostInfo->"doh-url") do={
$LogPrint debug $ScriptName ("Current DoH server is still up: " . $DohCurrent);
+ :set ExitOK true;
:error true;
}
@@ -132,6 +136,7 @@
}
/ip/dns/cache/flush;
$LogPrint info $ScriptName ("Setting DoH server: " . ($DohServer->"doh-url"));
+ :set ExitOK true;
:error true;
} else={
$LogPrint warning $ScriptName ("Received unexpected response from DoH server: " . \
@@ -139,4 +144,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/netwatch-notify.rsc b/netwatch-notify.rsc
index a49d0cd..e79977e 100644
--- a/netwatch-notify.rsc
+++ b/netwatch-notify.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: netwatch-notify
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.15
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -75,6 +76,7 @@
}
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -218,4 +220,6 @@
"since"=($Metric->"since") };
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/news-and-changes.rsc b/news-and-changes.rsc
index 9ab811d..545a0c9 100644
--- a/news-and-changes.rsc
+++ b/news-and-changes.rsc
@@ -1,5 +1,5 @@
# News, changes and migration by RouterOS Scripts
-# Copyright (c) 2019-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
:global IDonate;
diff --git a/ospf-to-leds.rsc b/ospf-to-leds.rsc
index b78faa4..3400e7f 100644
--- a/ospf-to-leds.rsc
+++ b/ospf-to-leds.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: ospf-to-leds
-# Copyright (c) 2020-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2020-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -19,6 +20,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -42,4 +44,6 @@
/system/leds/set type=off [ find where leds=$LED ];
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/packages-update.rsc b/packages-update.rsc
index b08a48d..a79946d 100644
--- a/packages-update.rsc
+++ b/packages-update.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: packages-update
-# Copyright (c) 2019-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -45,6 +46,7 @@
}
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -52,11 +54,13 @@
:if ([ :typeof ($Update->"latest-version") ] = "nothing") do={
$LogPrint warning $ScriptName ("Latest version is not known.");
+ :set ExitOK true;
:error false;
}
:if ($Update->"installed-version" = $Update->"latest-version") do={
$LogPrint info $ScriptName ("Version " . $Update->"latest-version" . " is already installed.");
+ :set ExitOK true;
:error true;
}
@@ -85,10 +89,12 @@
$LogPrint info $ScriptName ("User requested to continue anyway.");
} else={
$LogPrint info $ScriptName ("Canceled update...");
+ :set ExitOK true;
:error false;
}
} else={
$LogPrint warning $ScriptName ("Canceled non-interactive update.");
+ :set ExitOK true;
:error false;
}
}
@@ -108,6 +114,7 @@
}
} else={
$LogPrint warning $ScriptName ("Not installing downgrade automatically.");
+ :set ExitOK true;
:error false;
}
}
@@ -116,6 +123,7 @@
:local PkgName [ /system/package/get $Package name ];
:if ([ $DownloadPackage $PkgName ($Update->"latest-version") ] = false) do={
$LogPrint error $ScriptName ("Download for package " . $PkgName . " failed, update aborted.");
+ :set ExitOK true;
:error false;
}
}
@@ -130,11 +138,13 @@
:put "Do you want to (s)chedule reboot or (r)eboot now? [s/R]";
:if (([ /terminal/inkey timeout=60 ] % 32) = 19) do={
$Schedule $ScriptName;
+ :set ExitOK true;
:error true;
}
} else={
:if ($PackagesUpdateDeferReboot = true) do={
$Schedule $ScriptName;
+ :set ExitOK true;
:error true;
}
}
@@ -142,4 +152,6 @@
$LogPrint info $ScriptName ("Rebooting for update.");
:delay 1s;
/system/reboot;
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/ppp-on-up.rsc b/ppp-on-up.rsc
index 337b32d..a776ce2 100644
--- a/ppp-on-up.rsc
+++ b/ppp-on-up.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: ppp-on-up
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -20,6 +21,7 @@
:if ([ :typeof $Interface ] = "nothing") do={
$LogPrint error $ScriptName ("This script is supposed to run from ppp on-up script hook.");
+ :set ExitOK true;
:error false;
}
@@ -37,4 +39,6 @@
$LogPrint warning $ScriptName ("Running script '" . $ScriptName . "' failed!");
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/sms-action.rsc b/sms-action.rsc
index c896659..f22a0bb 100644
--- a/sms-action.rsc
+++ b/sms-action.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: sms-action
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -23,6 +24,7 @@
:if ([ :typeof $Action ] = "nothing") do={
$LogPrint error $ScriptName ("This script is supposed to run from SMS hook with action=...");
+ :set ExitOK true;
:error false;
}
@@ -34,4 +36,6 @@
} else={
$LogPrint warning $ScriptName ("The code for action '" . $Action . "' failed syntax validation!");
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/sms-forward.rsc b/sms-forward.rsc
index 0d493b6..efebb75 100644
--- a/sms-forward.rsc
+++ b/sms-forward.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: sms-forward
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Anatoly Bubenkov <bubenkoff@gmail.com>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -12,6 +12,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -28,11 +29,13 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ /tool/sms/get receive-enabled ] = false) do={
$LogPrintOnce warning $ScriptName ("Receiving of SMS is not enabled.");
+ :set ExitOK true;
:error false;
}
@@ -42,6 +45,7 @@
:if ([ /interface/lte/get ($Settings->"port") running ] != true) do={
$LogPrint info $ScriptName ("The LTE interface is not in running state, skipping.");
+ :set ExitOK true;
:error true;
}
@@ -92,4 +96,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/super-mario-theme.rsc b/super-mario-theme.rsc
index 63308b0..fc868c8 100644
--- a/super-mario-theme.rsc
+++ b/super-mario-theme.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: super-mario-theme
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# play Super Mario theme
diff --git a/telegram-chat.rsc b/telegram-chat.rsc
index f2750f5..eebb617 100644
--- a/telegram-chat.rsc
+++ b/telegram-chat.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: telegram-chat
-# Copyright (c) 2023-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2023-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.15
@@ -11,6 +11,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -43,6 +44,7 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -57,6 +59,7 @@
:if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={
$LogPrint warning $ScriptName ("Downloading required certificate failed.");
+ :set ExitOK true;
:error false;
}
@@ -82,6 +85,7 @@
:if ($Data = false) do={
$LogPrint warning $ScriptName ("Failed getting updates.");
+ :set ExitOK true;
:error false;
}
@@ -130,6 +134,7 @@
:local File ("tmpfs/telegram-chat/" . [ $GetRandom20CharAlNum 6 ]);
:if ([ $MkDir "tmpfs/telegram-chat" ] = false) do={
$LogPrint error $ScriptName ("Failed creating directory!");
+ :set ExitOK true;
:error false;
}
$LogPrint info $ScriptName ("Running command from update " . $UpdateID . ": " . $Command);
@@ -176,4 +181,6 @@
}
:set TelegramChatOffset ([ :pick $TelegramChatOffset 1 3 ], \
[ $IfThenElse ($UpdateID >= $TelegramChatOffset->2) ($UpdateID + 1) ($TelegramChatOffset->2) ]);
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/unattended-lte-firmware-upgrade.rsc b/unattended-lte-firmware-upgrade.rsc
index 7ce4028..f1bc552 100644
--- a/unattended-lte-firmware-upgrade.rsc
+++ b/unattended-lte-firmware-upgrade.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: unattended-lte-firmware-upgrade
-# Copyright (c) 2018-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2018-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# schedule unattended lte firmware upgrade
diff --git a/update-gre-address.rsc b/update-gre-address.rsc
index 6dd829d..4ac311a 100644
--- a/update-gre-address.rsc
+++ b/update-gre-address.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: update-gre-address
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.14
@@ -12,6 +12,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -20,6 +21,7 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
@@ -39,4 +41,6 @@
}
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}
diff --git a/update-tunnelbroker.rsc b/update-tunnelbroker.rsc
index 67a5d30..589544c 100644
--- a/update-tunnelbroker.rsc
+++ b/update-tunnelbroker.rsc
@@ -1,6 +1,6 @@
#!rsc by RouterOS
# RouterOS script: update-tunnelbroker
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Michael Gisbers <michael@gisbers.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
@@ -13,6 +13,7 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:local ExitOK false;
:do {
:local ScriptName [ :jobname ];
@@ -22,11 +23,13 @@
:global ScriptLock;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" ] = false) do={
$LogPrint error $ScriptName ("Downloading required certificate failed.");
+ :set ExitOK true;
:error false;
}
@@ -50,6 +53,7 @@
:if (!($Data ~ "^(good|nochg) ")) do={
$LogPrint error $ScriptName ("Failed sending the local address to tunnelbroker or unexpected response!");
+ :set ExitOK true;
:error false;
}
@@ -64,4 +68,6 @@
/interface/6to4/set $Interface local-address=$PublicAddress;
}
}
-} on-error={ }
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
+}