автобэкап на email

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

автобэкап на email

Сообщение bear »

привет

есть простой скрипт:

Код: Выделить всё

:log info "starting weekly backup";
/system backup save name=4011_Weekly;
:delay 00:00:05
/export file=4011_Weekly;
:delay 00:00:05
/system package print file=4011_Version.txt;
:delay 00:00:05
/tool e-mail send file=4011_Weekly.backup,4011_Weekly.rsc,4011_Version.txt to="[email protected]" subject="Mikrotik 4011 weekly backup" body="Mikrotik 4011 backup, script and version files attached, $[/system clock get date] at $[/system clock get time]";
:log info "weekly backup script completed";
без проблем отрабатывает в консоли, но не хочет работать в скриптах
даже первый файл не создаёт

подскажите пожалуйста, в чём ошибка?

Изображение


upd:
сам дурак
забыл дать права на запись
всё работает теперь
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

руки чешутся, приключения продолжаются :-))
собираю следующую версию скрипта

Код: Выделить всё

:log info "starting weekly backup...";

:local sysname [/system identity get name];
:local sysver [/system package get system version];

:log info "deleting last backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] "$sysname"]]!="nil") do={/file remove $i}};
:delay 2

:log info "flushing DNS cache...";
/ip dns cache flush;
:delay 2

:log info "creating backup file...";
:local backupfile ("$sysname".[:pick [/system clock get date] 7 11].[:pick [/system clock get date] 0 3].[:pick [/system clock get date] 4 6].".backup");
/system backup save name=$backupfile;
:delay 2

:log info "creating script file...";
:local exportfile ("$sysname". [:pick [/system clock get date] 7 11].[:pick [/system clock get date] 0 3].[:pick [/system clock get date] 4 6].".rsc");
/export file=$exportfile;
:delay 2

:log info "sending backup and script files to e-mail...";
/tool e-mail send file=$backupfile,$exportfile [email protected] subject="Mikrotik 4011 weekly backup" body="Mikrotik backup and script files attached \nRouterOS version: $sysver \n$[/system clock get date] at $[/system clock get time]";
:delay 5

:log info "...weekly backup script completed";
возникшие проблемы:
1. "deleting last backups" удаляет вообще все файлы
2. "creating script file" не создаёт rsc-файл
3. полученный backup-файл не цепляется к письму
4. в письмо не записывается переменная sysver

подскажите пожалуйста, где я ошибаюсь?
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

ФИНАЛЬНАЯ ВЕРСИЯ СКРИПТА (ROS 6.x-7.9)

1. добавляем скрипт в System - Scripts (надо будет придумать имя скрпта)
2. расписание создаём в System - Schedule (в области On Event указываем имя скрипта из п.1)

остановился на таком варианте:

Код: Выделить всё

{
:log info "starting backup process...";

:local sysver [/system package get routeros version];
:local sysname [/system identity get name];
:local rbmodel [/system router get model];
:local rbuptime [/system resource get uptime];

:log info "flushing DNS cache...";
/ip dns cache flush;
:delay 2;

:log info "deleting latest backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] "$sysname-"]]!="nil") do={/file remove $i}};
:delay 2;

:log info "creating backup file...";
:local backupfile ("$sysname-" . [:pick [/system clock get date] 7 11] . [:pick [/system clock get date] 0 3] . [:pick [/system clock get date] 4 6] . "-v$sysver" . ".backup");
/system backup save name=$backupfile;
:delay 2;

:log info "creating script file...";
:local exportfile ("$sysname-" . [:pick [/system clock get date] 7 11] . [:pick [/system clock get date] 0 3] . [:pick [/system clock get date] 4 6] . "-v$sysver" . ".rsc");
/export show-sensitive file=$exportfile;
:delay 2;

:local files ($backupfile,$exportfile);

:log info "sending files via email...";
/tool e-mail send [email protected] file=$files subject=("$rbmodel backup (" . [/system clock get date] . ")") body=("$sysname backup files are in the attachment.\nTime and Date: " . [/system clock get time] . " " . [/system clock get date] . "\n\nModel: $rbmodel\nRouterOS: $sysver\nUptime: $rbuptime");
:delay 4;

:log info "...system backup completed";
}
ROS 7.10+
в ROS 7.10+ немного "поломали" работу с датой через переменные, поэтому, если вы обновились на одну из этих версий, рекомендую обновить и скрипт
функционально ничего не менял, только имена файлов подправил

Код: Выделить всё

{
:log info "starting backup process...";

:local sysver [/system package get routeros version];
:local sysname [/system identity get name];
:local rbmodel [/system router get model];
:local rbuptime [/system resource get uptime];

/system clock
:local date [get date];

:log info "flushing DNS cache...";
/ip dns cache flush;
:delay 2;

:log info "deleting latest backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] "$sysname_"]]!="nil") do={/file remove $i}};
:delay 2;

:log info "creating backup file...";
:local backupfile ("$sysname_" . "$date" . "_v$sysver" . ".backup");
/system backup save name=$backupfile;
:delay 2;

:log info "creating script file...";
:local exportfile ("$sysname_" . "$date" . "_v$sysver" . ".rsc");
/export show-sensitive file=$exportfile;
:delay 2;

:local files ($backupfile,$exportfile);

:log info "sending files via email...";
/tool e-mail send [email protected] file=$files subject=("$rbmodel backup (" . [/system clock get date] . ")") body=("$sysname backup files are in the attachment.\nTime and Date: " . [/system clock get time] . " " . [/system clock get date] . "\n\nModel: $rbmodel\nRouterOS: $sysver\nUptime: $rbuptime");
:delay 4;

:log info "...system backup completed";
}
скрипт полностью рабочий, только сначала не забудьте настроить Tools->Email и заменить email-адрес в скрипте на свой

единственная проблема, которую не могу решить - как прицепить два вложения к письму?
сейчас приходится два письма слать
если знать точно имена файлов и подставлять их в атачмент (как в самом первом скрипте), то можно отсылать письмо с несколькими вложениями, а вот с вложениями в виде переменных так не получилось

upd:
подправил скрипт
теперь всё ок, письмо только одно и к нему цепляются оба файла

upd2:
косметические изменения
универсальный вариант скрипта, в переменных и именах файлов больше нет привязки к конкретной модели

upd3:
скрипт стал ещё более универсальным, должен работать и на ROS 6.x и на ROS 7.x
в rsc файл теперь экспортируются и пароли (если вам это не нужно, удалите "show-sensitive" из скрипта)

upd4:
в связи с особенностями ROS 7.10+, добавил ещё одну версию скрипта
Последний раз редактировалось bear 21 сен 2023, 10:09, всего редактировалось 9 раз.
borea2006
Сообщения: 1
Зарегистрирован: 04 мар 2022, 15:26

Re: автобэкап на email

Сообщение borea2006 »

RouterOS v6.X

Код: Выделить всё

{
:log warning "Starting Backup Script...";
:local sysname [/system identity get name];
:local sysver [/system package get system version];
:log warning "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;
:log warning "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;
:local smtpserv [:resolve "smtp.mail.com"];
:local Eaccount "[email protected]";
:local Eaccountto "[email protected]";
:local tls "yes";
# yes/no/tls-only
:local smtpport "587";
:local pass "password";
: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 warning "Creating new Full Backup file...";
/system backup save name=$backupfile;
:delay 2;
: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 warning "Creating new Setup Script file...";
/export file=$exportfile;
:delay 2;
:log warning "Sending all Backup file via E-mail...";
/tool e-mail send from="<$Eaccount>" to=$Eaccountto server=$smtpserv \
port=$smtpport user=$Eaccount password=$pass start-tls=$tls file=($backupfile,$exportfile) \
subject=("$sysname Backup (" . [/system clock get date] . ")") \
body=("$sysname Backup file see in attachment.\nRouterOS version: \
$sysver\nCreated: " . [/system clock get time] . " " . \
[/system clock get date]);
:delay 5;
:log warning "All System Backups emailed successfully.\nBackuping completed.";
}
RouterOS v7.X

Код: Выделить всё

{
:log warning "Starting Backup Script...";
:local sysname [/system identity get name];
:local sysver [/system package get routeros version];
:log warning "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;
:log warning "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;
:local smtpserv [:resolve "smtp.mail.com"];
:local Eaccount "[email protected]";
:local Eaccountto "[email protected]";
:local tls "starttls";
# yes/no/starttls
:local smtpport "587";
:local pass "password";
: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 warning "Creating new Full Backup file...";
/system backup/save name=$backupfile;
:delay 2;
: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 warning "Creating new Setup Script file...";
/export file=$exportfile;
:delay 2;
:log warning "Sending all Backup file via E-mail...";
/tool e-mail send from="<$Eaccount>" to=$Eaccountto server=$smtpserv \
port=$smtpport user=$Eaccount password=$pass tls=$tls file=($backupfile,$exportfile) \
subject=("$sysname Backup (" . [/system clock get date] . ")") \
body=("$sysname Backup file see in attachment.\nRouterOS version: \
$sysver\nCreated: " . [/system clock get time] . " " . \
[/system clock get date]);
:delay 5;
:log warning "All System Backups emailed successfully.\nBackuping completed.";
}
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

Здравствуйте, а не могли бы вы описать ход действий, что и куда писать? Просто на носу сессия, а занятий толком не было но преподаватель хочет чтобы написали скрипт.
Конечно же если вас это не затруднит.
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

скрипт в System - Scripts
расписание в System - Schedule (в область On Event указываем имя скрипта)
всё
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

:log info "starting weekly backup";
/system backup save name=4011_Weekly;
:delay 00:00:05
/export file=4011_Weekly;
:delay 00:00:05
/system package print file=4011_Version.txt;
:delay 00:00:05
/tool e-mail send file=4011_Weekly.backup,4011_Weekly.rsc,4011_Version.txt to="[email protected]" subject="Mikrotik 4011 weekly backup" body="Mikrotik 4011 backup, script and version files attached, $[/system clock get date] at $[/system clock get time]";
:log info "weekly backup script completed";

как я понял 00:00:05 это время когда файл перезаписывается?
и чтобы использовать этот скрипт нужно вместо email@... указать свой?
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

System - Schedule (в область On Event указываем имя скрипта)
имя скрипта просто написать как есть или же нужно знаки?
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

Marck писал(а): 20 апр 2022, 15:0200:00:05 это время когда файл перезаписывается?
нет
это пауза в 5 секунд перед следующим действием
время создания бэкапа и перезаписи указывается в System - Schedule
Marck писал(а): 20 апр 2022, 15:02чтобы использовать этот скрипт нужно вместо email@... указать свой?
да
на всякий случай добавлю: отправка на почту подразумевает, что в Tools - Email всё настроено
Marck писал(а): 20 апр 2022, 15:05имя скрипта просто написать как есть
да
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

сейчас попробую. Спасибо огромное за ответы
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

Никак не могу сделать...
Как я понял после того как я прописал в Scheduler должно же изменяться значения Run Count в Script List?
Просто в Scheduler оно изменяется, но вот скрипт не запускается.
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

А в Tools->Email что нужно указать в значения server? мой ір сети?
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

сначала надо перепроверять скрипт
запускать только сам скрипт, без шедулера
запускать и смотреть, если создаются файлы
если создаются, значит проблема в отправке и надо проверять настройки email
зайти в настройки email и отправить тестовый
и т.п.
Marck писал(а): 20 апр 2022, 16:14 А в Tools->Email что нужно указать в значения server? мой ір сети?
я вышел дал ссылку на скриншот
там указывается smtp-сервер
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

Всё сделал, огромное спасибооооо)
Проблема была как я понял в том ,что лабораторные роботы по настройке routerOs повлияли на всё...
Сбросил настройки и всё как по маслу.
Для gmail вписывал в EMAIL Settigs:
server - 173.194.220.108
port - 587
Start TLS - yes
Пароль прописывал такой же как на почте(почта просто для тестов была)
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

4011_Weekly.backup
4011_Weekly.rsc
4011_Version.txt
а можно краткое объяснение что будет в этих файлах?
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

Marck писал(а): 20 апр 2022, 18:52 4011_Weekly.backup
обычный бэкап-файл
Marck писал(а): 20 апр 2022, 18:52 4011_Weekly.rsc
настройки в виде скрипта
можно открыть блокнотом и построчно копировать/вставлять в терминал
Marck писал(а): 20 апр 2022, 18:52 4011_Version.txt
это я не помню уже, в финальной версии я его не создаю
скорее всего туда записывалась версия прошивки
можно открыть блокнотом и глянуть
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

Re: автобэкап на email

Сообщение Marck »

Понял))Огромное спасибо ещё раз)
Александр Глазков
Сообщения: 1
Зарегистрирован: 10 окт 2022, 13:40

Re: автобэкап на email

Сообщение Александр Глазков »

Огромное спасибо за пример скрипта, всё заработало с первой попытки :)
P.S. Ваше решение более актуальное, нежели размещенное на микротик.вики ;)
sharik987
Сообщения: 41
Зарегистрирован: 03 сен 2018, 12:47

Re: автобэкап на email

Сообщение sharik987 »

borea2006 писал(а): 04 мар 2022, 15:34 RouterOS v6.X
Спасибо за скрипт и труды!
Вопрос. что в скрипте нужно изменять, Только емаил, или еще нужно чего? Смущает эти переменные


#Зачем две переменные, за что каждая отвечает?
:local Eaccount "[email protected]";
:local Eaccountto "[email protected]";

#Зачем это нужно? Если вроде как вы написали что всё есть в tools-email
:local tls "yes";
# yes/no/tls-only
:local smtpport "587";
:local pass "password";
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

sharik987 писал(а): 12 окт 2022, 17:31 Вопрос. что в скрипте нужно изменять, Только емаил, или еще нужно чего?
если для 6-й версии ROS (не знаю если заведётся на 7-й), возьми мою версию скрипта (на сообщение выше поста от borea2006), там надо только адрес заменить куда будут высылаться файлы
sharik987
Сообщения: 41
Зарегистрирован: 03 сен 2018, 12:47

Re: автобэкап на email

Сообщение sharik987 »

bear писал(а): 12 окт 2022, 20:10
sharik987 писал(а): 12 окт 2022, 17:31 Вопрос. что в скрипте нужно изменять, Только емаил, или еще нужно чего?
если для 6-й версии ROS (не знаю если заведётся на 7-й), возьми мою версию скрипта (на сообщение выше поста от borea2006), там надо только адрес заменить куда будут высылаться файлы
Спасибо. на 6 всё работает. Есть еще с 7 версией, на ней Ваш не работает...
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

sharik987 писал(а): 13 окт 2022, 11:11 Есть еще с 7 версией, на ней Ваш не работает...
тоже планирую перейти на 7, но не могу время найти
когда перейду, буду ковырять и выложу исправленный вариант для 7
Аватара пользователя
Chupaka
Сообщения: 4065
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: автобэкап на email

Сообщение Chupaka »

sharik987 писал(а): 13 окт 2022, 11:11 Есть еще с 7 версией, на ней Ваш не работает...
А в логах при этом сообщения есть? Синтаксис, вроде, верный для v7.
Аватара пользователя
bear
Сообщения: 167
Зарегистрирован: 03 мар 2016, 18:39

Re: автобэкап на email

Сообщение bear »

sharik987 писал(а): 13 окт 2022, 11:11 Спасибо. на 6 всё работает. Есть еще с 7 версией, на ней Ваш не работает...
для 7-й версии ROS нужно в самом начале моего скрипта заменить

Код: Выделить всё

:local sysver [/system package get system version];
на

Код: Выделить всё

:local sysver [/system package get routeros version];
получившийся вариант работает и на ROS 6.х и на 7.х

подправил сообщение со скриптом
sharik987
Сообщения: 41
Зарегистрирован: 03 сен 2018, 12:47

Re: автобэкап на email

Сообщение sharik987 »

Я что то сам накрутил, намутил, и получилось такое:

Код: Выделить всё

{
:log warning "Starting Backup Script...";
:local sysname [/system identity get name];
:local sysver [/system package get routeros version];
:local rbmodel [/system router get model];
:local rbuptime [/system resource get uptime];
:log warning "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;
:log warning "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;
: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 warning "Creating new Full Backup file...";
/system backup/save name=$backupfile;
:delay 2;
: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 warning "Creating new Setup Script file...";
/export file=$exportfile;
:delay 2;
:log warning "Sending all Backup file via E-mail...";
/tool e-mail send to=[b][email protected][/b] file=($backupfile,$exportfile) subject=("$sysname $rbmodel Backup (" . [/system clock get date] . ")") body=("$sysname backup files are in the attachment.\nTime and Date: " . [/system clock get time] . " " . [/system clock get date] . "\n\nModel: $rbmodel\nRouterOS: $sysver\nUptime: $rbuptime");
:delay 5;
:log warning "All System Backups emailed successfully.\nBackuping completed.";
Chupaka писал(а): 13 окт 2022, 15:16 А в логах при этом сообщения есть? Синтаксис, вроде, верный для v7.
Проблемы с отправкой сообщение, бекап точно делался.