mirror of
https://github.com/beeyev/Mikrotik-RouterOS-automatic-backup-and-update.git
synced 2025-07-15 08:24:37 +02:00
Refactor BackupAndUpdate.rsc for clarity and update email address
This commit is contained in:
parent
183086b154
commit
c9a8a174d7
1 changed files with 18 additions and 26 deletions
|
@ -1,6 +1,6 @@
|
||||||
# Script name: BackupAndUpdate
|
# Script name: BackupAndUpdate
|
||||||
#
|
#
|
||||||
#----------SCRIPT INFORMATION---------------------------------------------------
|
# SCRIPT INFORMATION
|
||||||
#
|
#
|
||||||
# Script: Mikrotik RouterOS automatic backup & update
|
# Script: Mikrotik RouterOS automatic backup & update
|
||||||
# Version: 25.04.12
|
# Version: 25.04.12
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
# IMPORTANT!
|
# IMPORTANT!
|
||||||
# Minimum supported RouterOS version is v6.43.7
|
# Minimum supported RouterOS version is v6.43.7
|
||||||
#
|
#
|
||||||
#----------MODIFY THIS SECTION AS NEEDED----------------------------------------
|
# --- MODIFY THIS SECTION AS NEEDED ---
|
||||||
# Notification e-mail
|
# Notification e-mail
|
||||||
# (Make sure you have configured Email settings in Tools -> Email)
|
# (Make sure you have configured Email settings in Tools -> Email)
|
||||||
:local emailAddress "yourmail@example.com";
|
:local emailAddress "yourmail@example.com";
|
||||||
|
@ -335,7 +335,7 @@
|
||||||
:error $exitErrorMessage
|
:error $exitErrorMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if the script is set to install only patch updates and if the update channel is valid
|
# Verify if script is set to install patch updates and if the update channel is valid
|
||||||
:if ($scriptMode = "osupdate" and $installOnlyPatchUpdates = true) do={
|
:if ($scriptMode = "osupdate" and $installOnlyPatchUpdates = true) do={
|
||||||
:if ($updateChannel != "stable" and $updateChannel != "long-term") do={
|
:if ($updateChannel != "stable" and $updateChannel != "long-term") do={
|
||||||
:log error ("$SMP Patch-only updates enabled, but update channel `$updateChannel` is invalid. Only `stable` and `long-term` are supported. Script stopped")
|
:log error ("$SMP Patch-only updates enabled, but update channel `$updateChannel` is invalid. Only `stable` and `long-term` are supported. Script stopped")
|
||||||
|
@ -351,18 +351,18 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Get current system date and time
|
# Get current date and time
|
||||||
#
|
#
|
||||||
:local rawTime [/system clock get time]
|
:local rawTime [/system clock get time]
|
||||||
:local rawDate [/system clock get date]
|
:local rawDate [/system clock get date]
|
||||||
|
|
||||||
## Current time in specific format `hh-mm-ss`
|
# Current time in specific format `hh-mm-ss`
|
||||||
:local currentTime ([:pick $rawTime 0 2] . "-" . [:pick $rawTime 3 5] . "-" . [:pick $rawTime 6 8])
|
:local currentTime ([:pick $rawTime 0 2] . "-" . [:pick $rawTime 3 5] . "-" . [:pick $rawTime 6 8])
|
||||||
|
|
||||||
## Current date `YYYY-MM-DD` or `YYYY-Mon-DD`, will be defined later in the script
|
# Current date `YYYY-MM-DD` or `YYYY-Mon-DD`
|
||||||
:local currentDate "undefined"
|
:local currentDate "undefined"
|
||||||
|
|
||||||
## Check if the date is in the old format, it should not start with a number
|
# Check if the date is in the old format
|
||||||
:if ([:len [:tonum [:pick $rawDate 0 1]]] = 0) do={
|
:if ([:len [:tonum [:pick $rawDate 0 1]]] = 0) do={
|
||||||
# Convert old format `nov/11/2023` → `2023-nov-11`
|
# Convert old format `nov/11/2023` → `2023-nov-11`
|
||||||
:set currentDate ([:pick $rawDate 7 11] . "-" . [:pick $rawDate 0 3] . "-" . [:pick $rawDate 4 6])
|
:set currentDate ([:pick $rawDate 7 11] . "-" . [:pick $rawDate 0 3] . "-" . [:pick $rawDate 4 6])
|
||||||
|
@ -371,11 +371,8 @@
|
||||||
:set currentDate $rawDate
|
:set currentDate $rawDate
|
||||||
}
|
}
|
||||||
|
|
||||||
## Combine date and time
|
|
||||||
:local currentDateTime ($currentDate . "-" . $currentTime)
|
:local currentDateTime ($currentDate . "-" . $currentTime)
|
||||||
|
|
||||||
##
|
|
||||||
|
|
||||||
:local deviceBoardName [/system resource get board-name]
|
:local deviceBoardName [/system resource get board-name]
|
||||||
|
|
||||||
## Check if it's a cloud hosted router
|
## Check if it's a cloud hosted router
|
||||||
|
@ -430,13 +427,13 @@
|
||||||
|
|
||||||
:local mailAttachments [:toarray ""]
|
:local mailAttachments [:toarray ""]
|
||||||
|
|
||||||
## IP address detection & anonymous statistics collection
|
## IP address detection
|
||||||
:if ($scriptStep = 1 or $scriptStep = 3) do={
|
:if ($scriptStep = 1 or $scriptStep = 3) do={
|
||||||
:if ($scriptStep = 3) do={
|
:if ($scriptStep = 3) do={
|
||||||
:log info ("$SMP Waiting for one minute before continuing to the final step.")
|
:log info ("$SMP Waiting for one minute before continuing to the final step.")
|
||||||
:delay 1m
|
:delay 1m
|
||||||
}
|
}
|
||||||
# default values, to be set later
|
# default values
|
||||||
:local publicIpAddress "not-detected"
|
:local publicIpAddress "not-detected"
|
||||||
:local telemetryDataQuery ""
|
:local telemetryDataQuery ""
|
||||||
|
|
||||||
|
@ -447,8 +444,8 @@
|
||||||
|
|
||||||
:do {:set publicIpAddress ([/tool fetch http-method="get" url=($ipAddressDetectServiceDefault . $telemetryDataQuery) output=user as-value]->"data")} on-error={
|
:do {:set publicIpAddress ([/tool fetch http-method="get" url=($ipAddressDetectServiceDefault . $telemetryDataQuery) output=user as-value]->"data")} on-error={
|
||||||
:if ($detectPublicIpAddress = true) do={
|
:if ($detectPublicIpAddress = true) do={
|
||||||
:log warning "$SMP Could not detect public IP address using default detection service: `$ipAddressDetectServiceDefault`"
|
:log warning "$SMP Failed to detect public IP using default service: `$ipAddressDetectServiceDefault`"
|
||||||
:log warning "$SMP Trying to detect public IP using fallback detection service: `$ipAddressDetectServiceFallback`"
|
:log warning "$SMP Trying fallback service: `$ipAddressDetectServiceFallback`"
|
||||||
|
|
||||||
:do {:set publicIpAddress ([/tool fetch http-method="get" url=$ipAddressDetectServiceFallback output=user as-value]->"data")} on-error={
|
:do {:set publicIpAddress ([/tool fetch http-method="get" url=$ipAddressDetectServiceFallback output=user as-value]->"data")} on-error={
|
||||||
:log warning "$SMP Could not detect public IP address using fallback detection service: `$ipAddressDetectServiceFallback`"
|
:log warning "$SMP Could not detect public IP address using fallback detection service: `$ipAddressDetectServiceFallback`"
|
||||||
|
@ -571,7 +568,7 @@
|
||||||
:set mailPtSubjectBackup "Backup failed"
|
:set mailPtSubjectBackup "Backup failed"
|
||||||
:set mailPtBodyBackup "The script failed to create backups. Please check device logs for more details."
|
:set mailPtBodyBackup "The script failed to create backups. Please check device logs for more details."
|
||||||
|
|
||||||
:log warning "$SMP Failed to create backup files. Update process will be cancelled, if the script is set to update the device."
|
:log warning "$SMP Backup creation failed. Update process will be canceled if automatic update is enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,14 +638,13 @@
|
||||||
:log info "$SMP Upgrading routerboard firmware from v.$deviceRbCurrentFw to v.$deviceRbUpgradeFw"
|
:log info "$SMP Upgrading routerboard firmware from v.$deviceRbCurrentFw to v.$deviceRbUpgradeFw"
|
||||||
|
|
||||||
/system routerboard upgrade
|
/system routerboard upgrade
|
||||||
## Wait until the upgrade is completed
|
|
||||||
:delay 2s
|
:delay 2s
|
||||||
|
|
||||||
:log info "$SMP routerboard upgrade process was completed, going to reboot in a moment!";
|
:log info "$SMP routerboard upgrade process was completed, going to reboot in a moment!";
|
||||||
|
|
||||||
## Set scheduled task to send final report on the next boot
|
## Set task to send final report on the next boot
|
||||||
/system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=":delay 5s; /system scheduler remove BKPUPD-NEXT-BOOT-TASK; :global buGlobalVarScriptStep 3; :global buGlobalVarTargetOsVersion \"$buGlobalVarTargetOsVersion\"; :delay 10s; /system script run BackupAndUpdate;" start-time=startup interval=0
|
/system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=":delay 5s; /system scheduler remove BKPUPD-NEXT-BOOT-TASK; :global buGlobalVarScriptStep 3; :global buGlobalVarTargetOsVersion \"$buGlobalVarTargetOsVersion\"; :delay 10s; /system script run BackupAndUpdate;" start-time=startup interval=0
|
||||||
|
|
||||||
## Reboot system to boot with new firmware
|
|
||||||
/system reboot;
|
/system reboot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,23 +663,19 @@
|
||||||
:local mailStep3Body ""
|
:local mailStep3Body ""
|
||||||
|
|
||||||
:if ($targetOsVersion = $runningOsVersion) do={
|
:if ($targetOsVersion = $runningOsVersion) do={
|
||||||
:log info "$SMP The script has successfully verified that the new RouterOS version was installed, target version: `$targetOsVersion`, current version: `$runningOsVersion`"
|
:log info "$SMP Successfully verified new RouterOS version: target: `$targetOsVersion`, current: `$runningOsVersion`"
|
||||||
|
|
||||||
:set mailStep3Subject ($mailStep3Subject . " - Update completed - Backup created")
|
:set mailStep3Subject ($mailStep3Subject . " - Update completed - Backup created")
|
||||||
:set mailStep3Body ($mailStep3Body . "RouterOS and routerboard upgrade process was completed")
|
:set mailStep3Body ($mailStep3Body . "RouterOS and routerboard upgrade process was completed")
|
||||||
:set mailStep3Body ($mailStep3Body . "\nNew RouterOS version: v.$targetOsVersion, routerboard firmware: v.$deviceRbCurrentFw")
|
:set mailStep3Body ($mailStep3Body . "\nNew RouterOS version: v.$targetOsVersion, routerboard firmware: v.$deviceRbCurrentFw")
|
||||||
:set mailStep3Body ($mailStep3Body . "\n$changelogUrl")
|
:set mailStep3Body ($mailStep3Body . "\n$changelogUrl\nBackups of the upgraded system are in the attachment of this email.\n\n$mailBodyDeviceInfo\n\n$mailBodyCopyright")
|
||||||
:set mailStep3Body ($mailStep3Body . "\nBackups of the upgraded system are in the attachment of this email.")
|
|
||||||
:set mailStep3Body ($mailStep3Body . "\n\n" . $mailBodyDeviceInfo . "\n\n" . $mailBodyCopyright)
|
|
||||||
|
|
||||||
:set mailAttachments [$FuncCreateBackups $backupNameAfterUpdate $backupPassword $sensitiveDataInConfig];
|
:set mailAttachments [$FuncCreateBackups $backupNameAfterUpdate $backupPassword $sensitiveDataInConfig];
|
||||||
} else={
|
} else={
|
||||||
:log error "$SMP The script was unable to verify that the new RouterOS version was installed, target version: `$targetOsVersion`, current version: `$runningOsVersion`"
|
:log error "$SMP Failed to verify new RouterOS version: target: `$targetOsVersion`, current: `$runningOsVersion`"
|
||||||
:set mailStep3Subject ($mailStep3Subject . " - Update failed")
|
:set mailStep3Subject ($mailStep3Subject . " - Update failed")
|
||||||
|
|
||||||
:set mailStep3Body ($mailStep3Body . "The script was unable to verify that the new RouterOS version was installed, target version: `$targetOsVersion`, current version: `$runningOsVersion`")
|
:set mailStep3Body ($mailStep3Body . "The script was unable to verify that the new RouterOS version was installed, target version: `$targetOsVersion`, current version: `$runningOsVersion`\nCheck device logs for more details.\n\n$mailBodyDeviceInfo\n\n$mailBodyCopyright")
|
||||||
:set mailStep3Body ($mailStep3Body . "\nPlease check device logs for more details.")
|
|
||||||
:set mailStep3Body ($mailStep3Body . "\n\n" . $mailBodyDeviceInfo . "\n\n" . $mailBodyCopyright)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$FuncSendEmailSafe $emailAddress $mailStep3Subject $mailStep3Body $mailAttachments
|
$FuncSendEmailSafe $emailAddress $mailStep3Subject $mailStep3Body $mailAttachments
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue