дневник Седьмого

воскресенье, 7 октября 2012 г.

Mikrotik RouterOS log/backup to email

Хочу поделиться своим "вылизанным" скриптом бэкапа конфигурации и отсылки логов на почту с Mikrotik RouterBoard RB750GL (в моём случае 5.14, firmware 2.38). Думаю подойдёт к большинству устройств на этой славной ОС. Преимущество подхода в том, что сам файл конфигурации приходит в качестве приложенного к письму с логами файла. А логи находятся прямо в письме - не в приложении.

#:log info "///----> Я начал бэкапиться" (расскоменчиваю эти строки для дебага)
:global backupfile ([/system identity get name] . ".backup") #задаю переменную
:if ([/file find name=$backupfile] != "") do={/file rem $backupfile} #удаляю, если файл уже существует
:delay 2s

#:log info "///----> Подготавливаю лог для отправки"

: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")
}

#:log info "///----> Создаю бэкап"
/system backup save name=$backupfile
#:log info "///----> Жду 5 сек. завершения процедуры"
:delay 5s
#:log info "///----> Посылаю конфиг на e-mail" (следующий код - одна длинная строка!)
/tool e-mail send to=mail@examle.com subject=("router daily backup") file=$backupfile body=("Бэкап конфигурационного файла маршрутизатора " . [/system identity get name] . ". \nВыполнен: " . [/system clock get time] . " " . \ [/system clock get date] . " \n____________________\n \nUptime: " . [/system resource get uptime] . "\nСвободно оперативки: " . [/system resource get free-memory] . " из " . [/system resource get total-memory] . " Кбайт. \nСвободное место: " . [/system resource get free-hdd-space] . " из " . [/system resource get total-hdd-space] . " Кбайт. \nBad-блоки: " . [/system resource get bad-blocks] . " %. \nЗагрузка процессора на данный момент: " . [/system resource get cpu-load] . " % \n____________________\n \nПоследние записи в логе: \n \n" . $logMessages . " \n____________________ \n" . [/system identity get name])
#:log info "///----> Жду 10 сек. пока письмо отправится"
:delay 10s
/file remove $backupfile
:log info "///----> Бэкап завершён. Файл послан на mail@example.com. Ура!"

Ставлю на еженощное выполнение и в результате вместе с новостями с утра читаю вести с фронта - на почту приходит письмо такого вида

14 комментариев:

  1. Подскажите в чем может быть проблема, RouterOS 5.21 x86, скрипт не выполняется, счетчик скрипта добавляется но не в логах нет информации о резервировании, не на почту не приходит.

    ОтветитьУдалить
    Ответы
    1. Попробуйте запустить из терминала - там наверняка будет больше информации. Сначала вычислите номер скрипта командой "system script print", а потом запустите "system script run 0" (вместо нуля свой номер).

      Удалить
    2. И, да - расскоментируйте логи (:log info), можете ещё своих понаставить - будет нагляднее на каком этапе затык.

      Удалить
    3. Если убираю все что ниже
      :log info "///----> Посылаю конфиг на e-mail"
      то в логах появляется "///----> Посылаю конфиг на e-mail",
      а если вставляю /tool e-mail send....
      то в логах тишина даже не появляется "///----> Я начал бэкапиться"

      Удалить
    4. А из терминала запускали? Он должен что-то умное подсказать.

      Удалить
    5. Спасибо разобрался! причина в непонятных изменениях при копировании. Вместо " встали такие << кавычки.

      Удалить
  2. Подскажите пожалуйста как решить 2 проблемы при использовании вашего скрипта
    1. Где и что надо поправить чтобы файл бекапа создавался в формате $name-$day$month$year.backup
    2. При отправке файла бекапа на мыло в логах появляется ошибка: Error sending e-mail error connection to server

    ОтветитьУдалить
    Ответы
    1. 1. Хм. Не знаю как вытянуть конкретно день/месяц/год - не актуально, поскольку дата содержится в самом письме. Попробуйте почитайте тут http://wiki.mikrotik.com/wiki/Manual:Scripting#Data_types
      2. Ну, совершенно очевидно, что или почту вы ни разу с него не отправляли, а как следствие, почтовая отсылка у вас просто не настроена - не указан сервер. Или указан, но по каким-то причинам он не доступен :) "error connection to server" - ключевые слова.
      Вот про настройку Tool Email http://wiki.mikrotik.com/wiki/Manual:Tools/email
      Ну или попрозаичней - http://wiki.mikrotik.com/wiki/%D0%A0%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA_%D0%BF%D0%BE_E-mail#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B4.D1.80.D1.83.D0.B3.D0.B8.D1.85_.D0.BF.D0.BE.D1.87.D1.82.D0.BE.D0.B2.D1.8B.D1.85_.D1.81.D0.B5.D1.80.D0.B2.D0.B8.D1.81.D0.BE.D0.B2

      Удалить
    2. Не отправлял.
      Настраиваю а отсылка все равно не идет...
      как настроено.
      address: 90.156.155.143
      starttls: no
      from:
      user: my@domain.ru
      password: 123

      Удалить
    3. Это какой-то ваш собственный сервер? Я думаю, надо у него в логах изучать. Добейтесь, для начала, успешной простой отсылки письма, типа:
      /tool e-mail send to="свой@какой-нибудь.ящик"
      постепенно подставляя значения отсюда http://wiki.mikrotik.com/wiki/Manual:Tools/email#Sending_Email
      Может там обязательно надо указывать адрес отправителя или ещё какие-то параметры, о которых я знать не могу.

      Удалить
    4. Спасибо,буду разбираться.

      Удалить
  3. Добрый день. А как вам удалось использовать русские буквы в скрипте?

    ОтветитьУдалить
    Ответы
    1. Привет! Да в общем-то вот прям так как и есть. Надо понимать только, что посту много лет и как там сейчас обстоит дело в новых прошивках не подскажу.

      Удалить
    2. Ясно. Значит многое изменилось... А скрипт полезный, спасибо!

      Удалить