Принцип работы как и раньше:
- пароль для почтового аккаунта вводится в диалоге WinBox tools->email
- имя скрипта - любое удобное. У меня CheckUpdateAndEmail
- бэкапы настроек отправляются на почту двумя файлами. (.backup и .rsc)
- имя файла бекапа формируется из текущей даты, так что можно легко определить когда он был сделан.
- в письмо, дополнительно, вкладывается текущий Changelog от RouterOS чтобы оценить изменения и необходимость обновления.
- при использовании на нескольких роутерах определить его можно по имени (задается в WinBox system -> Identity)
{
## Check for update and send email with configuration if any
:log info "Starting Update check and backup script...";
## Notification e-mail
:local Eaccount "YourAccout@gmail.com";
## Changelog location
## :local Changelog "https://mikrotik.com/download/changelog ... elogs.html";
:local Changelog "https://mikrotik.com/current.rss";
:local ChangelogFilename "changelog_current.html";
## Resolve SMTP name and prepare backup variable
:local sysname [/system identity get name];
:local sysver [/system package get routeros version];
:local localSubj "Empty"
:local localBody "Empty"
:log info "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;
:local smtpserv [:resolve "smtp.gmail.com"];
## Check for update
/system package update
## Set channel not working on the latest FW
## set channel=current
check-for-updates
## Wait on slow connections
:delay 15s;
## Important note: "installed-version" was "current-version" on older Router OSes
:if ([get installed-version] != [get latest-version]) do={
## New version of RouterOS available
:log info ("Upgrade available for RouterOS on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])")
:set localSubj "RouterOS need to be upgraded on router $sysname"
:set localBody "Upgrade for RouterOS available on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])"
} else={
## RouterOS latest, let's check for updated firmware
:log info ("No RouterOS upgrade found, checking for HW upgrade...")
/system routerboard
:if ( [get current-firmware] != [get upgrade-firmware]) do={
## New version of firmware available
:log info ("Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]")
:set localSubj "Firmware need to be updated on router $sysname"
:set localBody "Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]"
} else={
:log info ("No Router HW upgrade found")
}
}
:log info "localSubj= $localSubj ";
:log info "localBody=$localBody";
:if ( !($localSubj = "Empty")) do={
:log info "Deleting last Backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] \
"$sysname-backup-"]]!="nil") do={/file remove $i}};
:delay 2;
:do {/file remove $ChangelogFilename} on-error={};
## Downloading changelog file
/tool fetch mode=https url=("$Changelog") dst-path=("$ChangelogFilename");
## Backup configuration
:local backupfile ("$sysname-backup-" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".backup");
:log info "Creating new Full Backup file...";
/system backup save name=$backupfile;
:delay 5;
:local exportfile ("$sysname-backup-" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".rsc");
:log info "Creating new Setup Script file...";
/export verbose file=$exportfile;
:delay 5;
:log info "Sending Full Backup file via E-mail...";
/tool e-mail send to=$Eaccount server=$smtpserv \
port=587 file=($backupfile ."," . $exportfile . "," . $ChangelogFilename) \
subject=("$localSubj") \
body=("$localBody");
:delay 10;
}
}
## Check for update and send email with configuration if any
:log info "Starting Update check and backup script...";
## Notification e-mail
:local Eaccount "YourAccout@gmail.com";
## Changelog location
## :local Changelog "https://mikrotik.com/download/changelog ... elogs.html";
:local Changelog "https://mikrotik.com/current.rss";
:local ChangelogFilename "changelog_current.html";
## Resolve SMTP name and prepare backup variable
:local sysname [/system identity get name];
:local sysver [/system package get routeros version];
:local localSubj "Empty"
:local localBody "Empty"
:log info "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;
:local smtpserv [:resolve "smtp.gmail.com"];
## Check for update
/system package update
## Set channel not working on the latest FW
## set channel=current
check-for-updates
## Wait on slow connections
:delay 15s;
## Important note: "installed-version" was "current-version" on older Router OSes
:if ([get installed-version] != [get latest-version]) do={
## New version of RouterOS available
:log info ("Upgrade available for RouterOS on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])")
:set localSubj "RouterOS need to be upgraded on router $sysname"
:set localBody "Upgrade for RouterOS available on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])"
} else={
## RouterOS latest, let's check for updated firmware
:log info ("No RouterOS upgrade found, checking for HW upgrade...")
/system routerboard
:if ( [get current-firmware] != [get upgrade-firmware]) do={
## New version of firmware available
:log info ("Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]")
:set localSubj "Firmware need to be updated on router $sysname"
:set localBody "Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]"
} else={
:log info ("No Router HW upgrade found")
}
}
:log info "localSubj= $localSubj ";
:log info "localBody=$localBody";
:if ( !($localSubj = "Empty")) do={
:log info "Deleting last Backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] \
"$sysname-backup-"]]!="nil") do={/file remove $i}};
:delay 2;
:do {/file remove $ChangelogFilename} on-error={};
## Downloading changelog file
/tool fetch mode=https url=("$Changelog") dst-path=("$ChangelogFilename");
## Backup configuration
:local backupfile ("$sysname-backup-" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".backup");
:log info "Creating new Full Backup file...";
/system backup save name=$backupfile;
:delay 5;
:local exportfile ("$sysname-backup-" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".rsc");
:log info "Creating new Setup Script file...";
/export verbose file=$exportfile;
:delay 5;
:log info "Sending Full Backup file via E-mail...";
/tool e-mail send to=$Eaccount server=$smtpserv \
port=587 file=($backupfile ."," . $exportfile . "," . $ChangelogFilename) \
subject=("$localSubj") \
body=("$localBody");
:delay 10;
}
}