Backup настроек на почту

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Реализация не моя абсолютно, но автора найти сложно, в разных источниках авторство приписывают себе разные люди. В любом случае, скажем автору спасибо и будем пользоваться его добротой.

Простейший вариант мне подсказал товарищ с ником mark949:

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

{/system backup save name=backup_Microtik; /tool e-mail send to="pochta@mail.ru" subject=([/system identity get name].backup) file=backup_Microtik.backup}


Требуется настройка отправки почты на самом Mikrotik. В Tools -> E-Mail надо прописать:
1. свой SMTP сервер (в виде ip);
2. имя от которого он будет отправлять почту;
3. логин и пароль соответственно.

Основным недостатком считаю то, что файл резервной копии необходимо потом удалять вручную. Второй способ более гибок. Скрипт при запуске ищет старые файлы и стирает их, записывая новые лишь после этого:

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

{
:log info "Starting Backup Script...";

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

:log info "Flushing DNS cache...";

/ip dns cache flush;
:delay 2;

: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;

:local smtpserv [:resolve "smtp.gmail.com"];

:local Eaccount "login@gmail.com";
: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 info "Creating new Full Backup file...";
/system backup save name=$backupfile;
:delay 5;
:log info "Sending Full Backup file via E-mail...";

/tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv port=587 user=$Eaccount password=$pass start-tls=yes file=$backupfile subject=("$sysname Full Backup (" . [/system clock get date] . ")") body=("$sysname full Backup file see in attachment.
RouterOS version: $sysver
Time and Date stamp: " . [/system clock get time] . " " . [/system clock get date]);

:delay 30;

: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 file=$exportfile;

:delay 5;

:log info "Sending Setup Script file via E-mail...";

/tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv port=587 user=$Eaccount password=$pass tls=yes file=$exportfile subject=("$sysname Setup Script Backup (" . [/system clock get date] . ")") body=("$sysname Setup Script file see in attachment.
RouterOS version: $sysver
Time and Date stamp: " . [/system clock get time] . " " . [/system clock get date]);

:delay 30;

:log info "All System Backups emailed successfully.
Backuping completed.";

}



Подставляем свои значения почтового аккаунта вместо login@gmail.com и password и в Scheduler с нужной вам частотой запуска. Настройки почты в Mikrotik не нужны, по-моему, в данном варианте. Итогом работы скрипта являются два файла, с помощью любого из которых можно восстановить настройки. Первый - это собственно файл *.backup, а второй просто файл экспорта настроек *.rsc .
Напоследок не премину напомнить, что в настройках ваши пароли к маршрутизатору. Пользуясь данными скриптами, необходимо исключить доступ на ваш почтовый аккаунт посторонних.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
seventh
Сообщения: 5
Зарегистрирован: 10 сен 2013, 08:52

Я просто оставлю это здесь.


Аватара пользователя
purumtumtum
Сообщения: 3
Зарегистрирован: 26 июл 2016, 10:14

В моем случае было удобнее отправлять бэкап с помощью почтовой учетки на яндексе. Скрипт собран из целой кучи других. Его особенности:

  • Корректная работа вне зависимости от наличия и настроек SMTP сервера - письма ходят через почтовый сервер Яндекса;
  • Корректное имя бэкап-файла (имя_железки + дата + время);
  • Критичные методы завернуты в обработчики ошибок, что значительно упрощает отладку и гарантирует четкую последовательность действий;
  • Сообщение, приходящее на почту содержит не только файл бэкапа и актуальную информацию о состоянии железки, но и лог событий самой железки;
  • Не оставляет за собой старых бэкап-файлов, сохраняя свободное место.

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

:local YandexLogin "YANDEX_MAILBOX_NAME@yandex.ru";
:local YandexPassword "YANDEX_MAILBOX_PASSWORD";

:local MailTo "YOUR_MAILBOX_NAME@gmail.com";
:local MailSubject "MikroTik Backup";

:local CurrentTime [/system clock get time];
:local CurrentDate [/system clock get date];

:local Hour [:tostr [:pick $CurrentTime 0 2]];
:local Min [:tostr [:pick $CurrentTime 3 5]];
:local Day [:tostr [:pick $CurrentDate 4 6]];
:local Month [:tostr [:pick $CurrentDate 0 3]];
:local Year [:tostr [:pick $CurrentDate 7 [:len $CurrentDate]]];

:do {
  :local FileName ([/system identity get name]."__$Day_$Month_$Year__$Hour_$Min.backup");
  /system backup save name=$FileName;
  :log info "Backup file ($FileName) created success";
 
  :do {
    :delay 2s;
    :global logMessages;
    :set logMessages ""
    :foreach i in=[/log find ] do={
      :set logMessages ($logMessages. [/log get $i time ]. " ");
      :set logMessages ($logMessages. [/log get $i message ]);
      :set logMessages ($logMessages. "\n")
    }
    /tool e-mail send server=213.180.204.38 port=587 start-tls=yes user=$YandexLogin \
      password=$YandexPassword to=$MailTo from=$YandexLogin \
      subject=($MailSubject." ($Day/$Month/$Year $Hour:$Min)") \
      body=( \
        "System information:". \
        "\n____________________\n \n". \
        "Board name: ".[/system resource get platform]." ".[/system resource get board-name]."\n". \
        "Version: ".[/system resource get version]."\n". \
        "CPU: ".[/system resource get cpu]." (load ".[/system resource get cpu-load]."%)\n". \
        "Free HDD space: ".[/system resource get free-hdd-space]." (total: ".[/system resource get total-hdd-space].")\n". \
        "Free memory: ".[/system resource get free-memory]." (total: ".[/system resource get total-memory].")\n". \
        "Uptime: ".[/system resource get uptime]. \
        "\n \n \n". \
        "Last log messages:". \
        "\n____________________\n \n". \
        $logMessages \
      ) file=$FileName;
    :log info "Mail with backup sending success";
    :do {
      :delay 3s;
      /file remove $FileName;
      :log info "Remove backup file success";
    } on-error={
      :log warning "Cannot remove backup file $FileName";
    };
  } on-error={
    :log warning "Email sending failed!";
  };
} on-error={
  :log error "Backup creation failed!";
};


Время от времени его немного дописываю, но этот вариант исправно работает уже несколько лет.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

)) В случае если что то случится и отправка не произойдет (например нет Интернет) то повторной отправки нет
Если яндекс сменит ИП адрес своего СМТП сервера - то печалька


Есть интересная задача и бюджет? http://mikrotik.site
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

vqd писал(а):)) В случае если что то случится и отправка не произойдет (например нет Интернет) то повторной отправки нет
Если яндекс сменит ИП адрес своего СМТП сервера - то печалька

Как предлагаете отслеживать состояние отправки? Вроде в последних версиях добавили обработчик вывода в терминал. Можно анализировать лог по сообщению "Error sending e-mail" с момента последнего запуска скрипта.
Ну а ip smtp - туда уже можно прописать домен, эту возможность добавили.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну вы просто из терминала попробуйте что-либо отправить на почту и проверьте, уйдет или нет. А еще у нас значительная часть юзеров фаервол при отладке не отключает, а потом долго не может понять, почему что-то не так.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

23q писал(а):Как предлагаете отслеживать состояние отправки? Вроде в последних версиях добавили обработчик вывода в терминал. Можно анализировать лог по сообщению "Error sending e-mail" с момента последнего запуска скрипта.
Ну а ip smtp - туда уже можно прописать домен, эту возможность добавили.


Эм ну как бы ексепшн есть а дальше пишите обработку ошибки. Логи то зачем ковырять?


Есть интересная задача и бюджет? http://mikrotik.site
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

vqd писал(а):
23q писал(а):Как предлагаете отслеживать состояние отправки? Вроде в последних версиях добавили обработчик вывода в терминал. Можно анализировать лог по сообщению "Error sending e-mail" с момента последнего запуска скрипта.
Ну а ip smtp - туда уже можно прописать домен, эту возможность добавили.


Эм ну как бы ексепшн есть а дальше пишите обработку ошибки. Логи то зачем ковырять?

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

:do {/tool e-mail send server=1.1.1.1 port=25 user=admin@test.com password=111 start-tls=no to="111@gmail.com" from=admin@test.com subject="555" body="sdg"} on-error={ :log info "hh"}

при недоступности сервера не отрабатывает.


23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

mrrc писал(а):Уж не знаю, что не так, но не отправляют у меня ничего опробованные скрипты.
Работает только отправка руками из консоли и этот простейший скрипт с использованием настроек из Tools -> Email:

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

{/system backup save name=backup_Microtik; /tool e-mail send to="admin@***" subject=([/system identity get name].backup) file=backup_Microtik.backup}

Включение отладки

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

/system logging add topics=e-mail action=memory
для Email отображает процесс общения с почтовым сервером только для вышеозначенного скрипта, варианты скриптов, использующие прямое подключение к smtp-серверам с передачей значений для подключения в самом скрипте, в логе не отображается, максимум сообщения о создании архивов и последующей неуспешной попытке отправки.

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

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

add action=accept chain=output dst-address=IP_MY_SMTP dst-port=25 log=yes log-prefix="" protocol=tcp


Есть идеи?

в консоли что пишет? дайте доступ в лк.


23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

mrrc писал(а):
23q писал(а):в консоли что пишет? дайте доступ в лк.

Из консоли руками на Яндекс и Джимэйл все отправляет, сейчас проверил, в логе процесс подключения, авторизации и отправки письма отлично виден, все приходит.
А при выполнении скриптов нифига не работает и что происходит - хз, в логах ничего не показывает.

Про доступ в лк не понял.

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

/tool e-mail send server=1.1.1.1 port=25 user=q@com password=123 start-tls=yes to=q@com from=q@com  subject="fdg" body="sdg"

этот код должен отрабатывать и в консоли и в скрипте


Ответить