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

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Аватара пользователя
bear
Сообщения: 134
Зарегистрирован: 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
Сообщения: 134
Зарегистрирован: 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
Сообщения: 134
Зарегистрирован: 03 мар 2016, 18:39

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

Сообщение bear »

ФИНАЛЬНАЯ ВЕРСИЯ СКРИПТА

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

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

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

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

:local sysname [/system identity get name];
:local sysver [/system package get system version];
: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 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:
косметические изменения
универсальный вариант скрипта, в переменных и именах файлов больше нет привязки к конкретной модели
Последний раз редактировалось bear 02 май 2022, 16:47, всего редактировалось 2 раза.
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
Сообщения: 134
Зарегистрирован: 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 protected] указать свой?
Marck
Сообщения: 9
Зарегистрирован: 20 апр 2022, 13:17

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

Сообщение Marck »

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

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

Сообщение bear »

Marck писал(а): 20 апр 2022, 15:0200:00:05 это время когда файл перезаписывается?
нет
это пауза в 5 секунд перед следующим действием
время создания бэкапа и перезаписи указывается в System - Schedule
Marck писал(а): 20 апр 2022, 15:02чтобы использовать этот скрипт нужно вместо [email protected] указать свой?
да
на всякий случай добавлю: отправка на почту подразумевает, что в 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
Сообщения: 134
Зарегистрирован: 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
Сообщения: 134
Зарегистрирован: 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 »

Понял))Огромное спасибо ещё раз)