Допиливаем…
Зачем?
Этот скрипт представляет из себя ремейк оригинала с добавлением «специй» в виде библиотеки Edelweiss. Логика и цели остаются теми же что и в оригинале, за исключением того, что все функции берутся из библиотеки. На вопрос «зачем изменения?» ответ очень прост — использование глобальной библиотеки позволяет сократить удельный вес для каждого скрипта за счёт глобализации и централизации функций (очевидно же…).
Русскоязычный онлайн-курс по MikroTik от нашего коллеги Дмитрия Скромнова. Здесь можно изучить MikroTik и RouterOS самостоятельно по курсу «Настройка оборудования MikroTik». Курс основан на официальной программе 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 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 для самостоятельного изучения. Серия курсов по 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’ов с Эдельвейсом — Aleksov's Blog