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

Здесь выкладываем скрипты
enzain
Сообщения: 291
Зарегистрирован: 26 дек 2017, 22:30

26 янв 2018, 11:30

felcons писал(а):сильно ногами не пинайте.
в код скрипта вставил вот те две строки
 [/interface get ether5 rx-byte]
 [/interface get ether5 tx-byte]
ставил там где уже body, где тело письма, и скрипт вообще отказался работать.
В телнете пробовал вводить те строки то данных никаких не выдавалось.


Не выдадутся.
Сначала в переменную надо записать, потом её использовать.


felcons
Сообщения: 11
Зарегистрирован: 16 янв 2018, 10:24

29 янв 2018, 15:41

сделал в форме переменных и не работает.
редактировал через веб интерфейс в разделе system scripts, в поле sources.
Вначале, как положено ставил 8 пробелов и всё описал.
получился вот такой скрипт:

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

:local PointLogin "";
:local PointPassword "";

:local MailTo "mymail@ukr.net";
: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=195.42.130.17 port=25 start-tls=no user=$PointLogin \
      password=$PointPassword to=$MailTo from="mysendmail@point.lviv.ua" \
      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". \
        "Send Bytes:".[interface ethernet get ether5 tx-bytes]. "\n". \
        "Received bytes".[interface ethernet get ether5 rx-bytes]. "\n". \
        "\n____________________\n \n". \
        $logMessages \
      ) file=$FileName;
#delete old log
/system logging action set memory memory-lines=1
/system logging action set memory memory-lines=65000
:log info "System log cleared by email-log-backup script...";
    :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!";
};


felcons
Сообщения: 11
Зарегистрирован: 16 янв 2018, 10:24

12 фев 2018, 13:31

Я пробовал уже по-разному задавать в скрипте вот таких две строки, как и было написано

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

[interface ethernet get ether5 rx-bytes]
[interface ethernet get ether5 tx-bytes]

как его проверить работает ли оно вообще? может как-то в телнете можна проверить?


enzain
Сообщения: 291
Зарегистрирован: 26 дек 2017, 22:30

13 фев 2018, 08:20

felcons писал(а):
12 фев 2018, 13:31
Я пробовал уже по-разному задавать в скрипте вот таких две строки, как и было написано

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

[interface ethernet get ether5 rx-bytes]
[interface ethernet get ether5 tx-bytes]

как его проверить работает ли оно вообще? может как-то в телнете можна проверить?
:global rx [interface ethernet get ether5 rx-bytes]
:global tx [interface ethernet get ether5 tx-bytes]
system script environment print


felcons
Сообщения: 11
Зарегистрирован: 16 янв 2018, 10:24

14 фев 2018, 13:49

Ну уже и в переменные задал и тогда вообще инфа не выдаётся в почту.
Что ж уже не так.
всё описал руками и переменные задал.
и скрипт вот такой:

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

:local PointLogin "";
:local PointPassword "";

:local MailTo "andrij@ukr.net";
: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")
    }
:global x1 [interface ethernet get ether1 tx-bytes];
:global x2 [interface ethernet get ether1 rx-bytes];
    /tool e-mail send server=195.42.130.17 port=25 start-tls=no user=$PointLogin \
      password=$PointPassword to=$MailTo from="felcons@point.lviv.ua" \
      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". \
        "send bytes: $x1 \n" \
        "received bites: $x2 \n" \
        "\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!";
};


Expressimo
Сообщения: 3
Зарегистрирован: 23 апр 2018, 15:48

23 апр 2018, 15:54

purumtumtum писал(а):
31 июл 2016, 11:33
В моем случае было удобнее отправлять бэкап с помощью почтовой учетки на яндексе. Скрипт собран из целой кучи других. Его особенности:
  • Корректная работа вне зависимости от наличия и настроек 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!";
};
Время от времени его немного дописываю, но этот вариант исправно работает уже несколько лет.
А как доработать этот скрипт, чтобы вместе с "полным" бэкапом делался и посылался по почте также бэкап конфигурации (.rsc), а в конце письма отображались не последние сообщения, а только определённые, например login failure?


mousesport007
Сообщения: 1
Зарегистрирован: 19 мар 2019, 10:32

19 мар 2019, 10:39

Expressimo писал(а):
23 апр 2018, 15:54
purumtumtum писал(а):
31 июл 2016, 11:33
В моем случае было удобнее отправлять бэкап с помощью почтовой учетки на яндексе. Скрипт собран из целой кучи других. Его особенности:
  • Корректная работа вне зависимости от наличия и настроек 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!";
};
Время от времени его немного дописываю, но этот вариант исправно работает уже несколько лет.
А как доработать этот скрипт, чтобы вместе с "полным" бэкапом делался и посылался по почте также бэкап конфигурации (.rsc), а в конце письма отображались не последние сообщения, а только определённые, например login failure?

немного доработал данный скрипт
добавил rsc и backup в одно сообщение
сделал resolv на smtp.yandex.ru вдруг ip яндекса поменяется
проверял на версии 6.44.1

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

:local YandexLogin "yourlogin@yandex.ru";
:local YandexPassword "yourpassword_yandex.ru";

:local MailTo "pochta_kuda_slat@blabla.ru";
: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]]];

:local smtpserv [:resolve "smtp.yandex.ru"];
:log info "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;

: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";
  
  :local Exportfile ([/system identity get name]."__$Day_$Month_$Year__$Hour_$Min.rsc");
  :log info "Backup file ($Exportfile) created success";
  /export file=$Exportfile;
  
  :local files {$FileName;$Exportfile};
  :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=$smtpserv 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=$files;
	
    :log info "Mail with backup sending success";
    :do {
      :delay 3s;
      /file remove $FileName;
	  :delay 3s;
	  /file remove $Exportfile;
      :log info "Remove backup file success";
    } on-error={
      :log warning "Cannot remove backup file $FileName";
    };
  } on-error={
	  :log warning "Email sending failed!";
	  :log warning "Deleting creating backups files";
	  :delay 3s;
      /file remove $FileName;
	  :delay 3s;
	  /file remove $Exportfile;
      :log info "Remove backup file success";
  };
} on-error={
  :log error "Backup creation failed!";
};


usag
Сообщения: 2
Зарегистрирован: 26 мар 2018, 10:52

06 апр 2019, 17:21

не отправляет на 6.43.2 на 6.43 отправляет причина не подскажите


ruslan.turanskiy
Сообщения: 1
Зарегистрирован: 06 июн 2019, 16:54

09 июн 2019, 10:33

Воспользовался скриптом из последнего поста, все работает - спасибо. Но возник вопрос, при отправке такого отчета с кириллицей приходят знаки вопроса. Я так понимаю, надо играть с кодировкой? Или это не поможет вовсе?


Аватара пользователя
kanitelka
Сообщения: 3
Зарегистрирован: 23 июл 2018, 13:21

28 июн 2019, 13:37

На 6.44 решил вопрос с работой скрипта следующим образом - заменил local на global.
Вдруг кому пригодится. :smu:sche_nie:


Ответить