Бекап MikroTik’а с Эдельвейсом

Допиливаем…

Зачем?

Этот скрипт представляет из себя ремейк оригинала с добавлением «специй» в виде библиотеки Edelweiss. Логика и цели остаются теми же что и в оригинале, за исключением того, что все функции берутся из библиотеки. На вопрос «зачем изменения?» ответ очень прост — использование глобальной библиотеки позволяет сократить удельный вес для каждого скрипта за счёт глобализации и централизации функций (очевидно же…).

Рецепт

Не будем повторяться, просто скрипт полностью, с небольшими дополнениями.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# Как долго храним бэкапы. Указываем в секундах минутах часах или днях (s/m/h/d).
:local history "7d";
# Куда спамить результатами.
:local email "mailn@example.com";
# Куда писать основной бэкап.
:local pathForBackups "disk1/backup/";
# Куда сохранять конфиги секций.
:local pathForConfigs "disk1/etc/config/";
# Куда сохранять бэкап скриптов.
:local pathForScripts "disk1/etc/script/";
# Перечисляем секции, которые будут бэкапиться по отдельности в виде скриптов.
# Пишем их полностью так, как они звучат до команды "export". К примеру ip route export
# - в массив вписываем только ip route.
:local configsArray {"ip route";"ip firewall";"ip pool";"ip dhcp-server";"interface"};
# Берём имя машинки
:local nme "@$[/system identity get name]";
# Имя скрипта.
:local scriptName "Backup";
# Формируем тему для письма.
:local mailSubject ([/system identity get name]."::".$scriptName);
 
# Инициализируем библиотеку и нужные нам функции.
/system script run "Edelweiss";
:global mlFrm;
:global cuDte;
:global beMel;
:global foDte;
:global flDel;
:global flCre;
 
# Даём знать о старте.
log info "$scriptName:: Starting...";
[$beMel Frequency=({"1975"; "1975"}) Delay=({"150"}) Length=({"100"})];
 
# Задаём шаблон имени файлов основных бэкапов.
set $bfn ($pathForBackups.([$foDte Date=[$cuDte]]->1).$nme);
 
# Создаём основной бэкап.
log info "$scriptName:: Start creating system backup";
/system backup save name=($bfn.".backup");
log info "$scriptName:: Done creating system backup";
beep frequency=1975 length=10ms;
delay 100ms;
 
# Создаём основной бэкап скрипт.
log info "$scriptName:: Start creating backup script";
/export compact file=($bfn.".rsc");
log info "$scriptName:: Done creating backup script";
beep frequency=1975 length=10ms;
delay 100ms;
 
# Бэкапим скрипты.
[$flCre Path=$pathForScripts Input="system script" Name=$scriptName];
# Бэкапим заданные функции.
[$flCre Path=$pathForConfigs Input=$configsArray Name=$scriptName];
 
# Удаляем старые файлы.
[$flDel File=$nme Name=$scriptName History=$history];
 
# В финале мероприятия объявляем глобально дату последнего бэкапа, сколько раз
#  отработал скрипт, весело пищим и спамим результатом на заданный почтовый ящик.
:global BackupLastTime [$cuDte];
:global BackupTimes ($BackupTimes+1);
[$beMel Frequency=({"1760.0"; "1760.0"}) Delay=({"150"}) Length=({"100"})];
 
/tool e-mail send from=$mlFrm to=$email subject=$mailSubject body="$mailSubject:: $[$cuDte]:: Success!\n" file=($bfn.".backup");
log info "$scriptName:: Exit";

Теперь осталось сохранить код с нужным именем и добавить в Scheduler строку запуска скрипта /system script run Backup, предварительно настроив время запуска.

MikroTik scheduler
MikroTik scheduler

Как быстро сделать бекап данных и восстановить данные из бекапа рассказывает Дмитрий Скромнов в русскоязычном онлайн-курсе по MikroTik для самостоятельного изучения. Серия курсов по MikroTik и RouterOS основана на официальной программе MTCNA, однако содержит намного больше полезной информации. 162 видеоурока и большая практическая задача, разбитая на 45 лабораторных работ. Время на изучение неограниченно – все материалы передаются бессрочно и их можно пересматривать сколько нужно. Первые 25 уроков можно посмотреть бесплатно, оставив заявку на странице курса.

Скрипт полностью без «слов»:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
:local history "7d";
:local email "mail@example.com";
:local pathForBackups "disk1/backup/";
:local pathForConfigs "disk1/etc/config/";
:local pathForScripts "disk1/etc/script/";
:local configsArray {"ip route";"ip firewall";"ip pool";"ip dhcp-server";"interface"};
:local nme "@$[/system identity get name]";
:local scriptName "Backup";
:local mailSubject ([/system identity get name]."::".$scriptName);
 
/system script run "Edelweiss";
:global mlFrm;
:global cuDte;
:global beMel;
:global foDte;
:global flDel;
:global flCre;
 
log info "$scriptName:: Starting...";
[$beMel Frequency=({"1975"; "1975"}) Delay=({"150"}) Length=({"100"})];
 
set $bfn ($pathForBackups.([$foDte Date=[$cuDte]]->1).$nme);
 
log info "$scriptName:: Start creating system backup";
/system backup save name=($bfn.".backup");
log info "$scriptName:: Done creating system backup";
beep frequency=1975 length=10ms;
delay 100ms;
 
log info "$scriptName:: Start creating backup script";
/export compact file=($bfn.".rsc");
log info "$scriptName:: Done creating backup script";
beep frequency=1975 length=10ms;
delay 100ms;
 
[$flCre Path=$pathForScripts Input="system script" Name=$scriptName];
[$flCre Path=$pathForConfigs Input=$configsArray Name=$scriptName];
 
[$flDel File=$nme Name=$scriptName History=$history];
 
:global BackupLastTime [$cuDte];
:global BackupTimes ($BackupTimes+1);
[$beMel Frequency=({"1760.0"; "1760.0"}) Delay=({"150"}) Length=({"100"})];
 
/tool e-mail send from=$mlFrm to=$email subject=$mailSubject body="$mailSubject:: $[$cuDte]:: Success!\n" file=($bfn.".backup");
log info "$scriptName:: Exit";

Бекап MikroTik’а с Эдельвейсом: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.