MikroTik Скрипты: Проверка обновления RouterOS

MikroTik скрипт запускающий проверку наличия обновления RouterOS. Если обновление системы найдено, отправляет сообщение в Telegram, иначе записывает лог о отсутствии обновлений.

? Для работы скрипта вы должны иметь Токен Телеграм бота и ID чата или персональный ID. Создание Telegram бота и получение необходимых ID не является темой этой статьи.

Сообщение Телеграм содержит:

  1. идентификатор устройства;
  2. сообщение с указанием версии обновления;
  3. ссылку на официальный сайт с описанием изменений;
  4. информацию о текущей версии устройства и ветку релиза.
Сообщение Telegram с просьбой обновить RouterOS
Пример Телеграм сообщения от WhiteHouseMikroTik

Содержание

  1. Как изменить идентификатор устройства
  2. Создать скрипт «Проверка обновления RouterOS» (простой)
  3. Создать скрипт «Проверка обновления RouterOS» (функции)
  4. Добавить запуск скрипта в расписание
  5. Решение проблем

Статья на других языках:
?? — MikroTik Scripts: Check RouterOS Update
?? — Scripts MikroTik: Verifique la actualización de RouterOS
?? — Scripts MikroTik: vérifier la mise à jour de RouterOS
?? — MikroTik-Skripte: Auf RouterOS-Update prüfen
?? — MikroTik-scripts: Controleer op RouterOS-updates

Как изменить идентификатор устройства

Измените идентификатор устройства, чтобы лучше понимать, какое устройство присылает запрос.

[System] -> [Identity]

или

/system identity set name="WhiteHouseMikroTik"

Создать скрипт «Проверка обновления RouterOS» (простой)

Простая версия скрипта, все данные указываются в тексте скрипта.

Для работы скрипта проверка обновления RouterOS необходимы разрешения: read, write, policy, test.

[System] -> [Scripts] -> [+] -> [Name: CheckUpdate] -> [Policy: read, write, test, policy]

Код скрипта:

# Name: CheckUpdateSimple v1.0.1
# Description: Check for RouterOS update (simple, not functions)  and send notification
# Author: Yun Sergey, MHelp.pro 2020
# License: GPL-3.0 License
# Description, purpose and questions: https://mhelp.pro/mikrotik-scripts-check-routeros-update/

:local DeviceName [/system identity get name];
:local Date [/system clock get date];
:local Time [/system clock get time];

:local CheckUpdate [/system package update check-for-updates as-value];
:local Channel ($CheckUpdate -> "channel");
:local InstalledVersion ($CheckUpdate -> "installed-version");
:local LatestVersion ($CheckUpdate -> "latest-version");

:log info "Script CheckUpdateSimple - Run.";

:if ($InstalledVersion != $LatestVersion) do={

    :local EmailMessageText "MikroTik RouterOS - New version $LatestVersion is available! \0D\0AInstalled version $InstalledVersion, chanell $Channel. \0D\0AChangelogs: https://mikrotik.com/download/changelogs";

    :local TelegramMessageText "MikroTik RouterOS - New version $LatestVersion is available! %0D%0A Installed version $InstalledVersion, chanell $Channel. %0D%0A <a href=\"https://mikrotik.com/download/changelogs\">Changelogs</a>";

    :log info "Script CheckUpdateSimple - New version is available, send notify.";

    # START SEND EMAIL MESSAGE
    :local SendFrom "from_mail@mhelp.pro";
    :local PasswordMail "Password";
    :local SmtpServer [:resolve "smtp.mhelp.pro"];
    :local UserName "from_mail@mhelp.pro";
    :local SmtpPort 465;
    :local UseTLS "tls-only";
    :local SendTo "notify@mhelp.pro";
    :local Subject "\F0\9F\93\A6 UPDATE: $DeviceName [$Date $Time]";
    :local SendText $EmailMessageText;
    /tool e-mail send to=$SendTo server=$SmtpServer port=$SmtpPort start-tls=$UseTLS user=$SendFrom password=$PasswordMail  from=$SendFrom subject=$Subject body=$SendText;
    # END SEND EMAIL MESSAGE

    # START SEND TELEGRAM MESSAGE
    :local BotToken "YourBotToken";
    :local ChatID "YourChatID";
    :local ParseMode "html";
    :local DisableWebPagePreview True;
    :local SendText "\F0\9F\93\A6 <b>UPDATE $DeviceName [$Date $Time]:</b> %0D%0A $TelegramMessageText";
    :local tgUrl "https://api.telegram.org/bot$BotToken/sendMessage?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview";
    /tool fetch http-method=get url=$tgUrl keep-result=no;
    # END SEND TELEGRAM MESSAGE

    } else={
:log info "Script CheckUpdateSimple - System is already up to date.";
};
:delay 1;
:log info "Script CheckUpdateSimple - Completed.";
MikroTik Скрипты: Проверка обновления RouterOS и отправка сообщения в Telegram

Если обновлений не обнаружено, скрипт выводит сообщение в лог. Так можно понять, что срипт работает успешно.

Создать скрипт «Проверка обновления RouterOS» (функции)

Если на устройстве используется множество скриптов, указывать параметры email, Telegram в каждом из скриптов — плохая идея.

Используйте в скриптах вызовы функций:

Для работы скрипта проверка обновления RouterOS необходимы разрешения: read, write, policy, test.

[System] -> [Scripts] -> [+] -> [Name: CheckUpdate] -> [Policy: read, write, test, policy]

Код скрипта:

# Name: CheckUpdateFunctions v1
# Description: Check for RouterOS update (use functions: EMailSendMessageFunction, TGBotSendMessageFunction)  and send notification
# Author: Yun Sergey, MHelp.pro 2020 
# License: GPL-3.0 License
# Description, purpose and questions: https://mhelp.pro/mikrotik-scripts-check-routeros-update/

:local DeviceName [/system identity get name];
:local Date [/system clock get date];
:local Time [/system clock get time];

:local CheckUpdate [/system package update check-for-updates as-value];
:local Channel ($CheckUpdate -> "channel");
:local InstalledVersion ($CheckUpdate -> "installed-version");
:local LatestVersion ($CheckUpdate -> "latest-version");

:log info "Script CheckUpdateFunctions - Run.";

:if ($InstalledVersion != $LatestVersion) do={

    :local EmailMessageText "MikroTik RouterOS - New version $LatestVersion is available! \0D\0AInstalled version $InstalledVersion, chanell $Channel. \0D\0AChangelogs: https://mikrotik.com/download/changelogs";

    :local TelegramMessageText "MikroTik RouterOS - New version $LatestVersion is available! %0D%0A Installed version $InstalledVersion, chanell $Channel. %0D%0A <a href=\"https://mikrotik.com/download/changelogs\">Changelogs</a>";

    :log info "Script CheckUpdateFunctions - New version is available, send notify.";

    # START SEND EMAIL MESSAGE
    :local SendTo "notify@mhelp.pro";
    :local Subject "\F0\9F\93\A6 UPDATE: $DeviceName [$Date $Time]";
    :local SendText $EmailMessageText;
    :local FileName "";
    :local SendEmail [:parse [/system script get EMailSendMessageFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$SendText Subject=$Subject FileName=$FileName;
    # END SEND EMAIL MESSAGE

    # START SEND TELEGRAM MESSAGE
    :local  SendText "\F0\9F\93\A6 <b>UPDATE $DeviceName [$Date $Time]:</b> %0D%0A $TelegramMessageText";
    :local SendTelegramMessage [:parse [/system script  get TGBotSendMessageFunction source]]; 
    $SendTelegramMessage MessageText=$SendText;
    # END SEND TELEGRAM MESSAGE

    } else={
:log info "Script CheckUpdateFunctions - System is already up to date.";
};
:delay 1;
:log info "Script CheckUpdateFunctions - Completed.";

Используется вызов функций EMailSendMessageFunction, TGBotSendMessageFunction. Будьте внимательны к названиям функций, они могут быть переименованы.

Добавить запуск скрипта в расписание

[System] -> [Schedule] -> [+] -> [Name:CheckUpdate] -> [Start Time: 07:00:00] -> [Interval: 1d 00:00:00] -> [Policy: read, write, policy, test]

Код скрипта:

/system script run CheckUpdate
Добавление скрипта проверки обновления RouterOS в планировщик заданий MikroTik

Теперь обновление какого-то устройства не будет забытым, каждое устройство MikroTik будет ежедневно проверять и напоминать о необходимости обновления!

Решение проблем

Диагностика работы скрипта (сообщения в журнале устройства):

  1. Script CheckUpdateSimple — Run — скрипт начал работу;
  2. Script CheckUpdateSimple — New version is available, send notify — обновление найдено, запущена отправка уведомлений;
  3. Script CheckUpdateSimple — System is already up to date — обновлений не найдено;
  4. Script CheckUpdateSimple — Completed — скрипт выполнен корректно.

Скрипт не работает при запуске вручную или из планировщика заданий

  1. Проверьте права запуска скрипта, они должны соответствовать указанным в статье (в ROS 6.47.8 замечена ошибка — максимальные права иногда вызывают ошибку доступа);
  2. Внимательно проверьте названия скриптов которые вызываются (статьи обновляются и названия скриптов могут измениться);

Уведомления не работают

Если существует более новая версия RouterOS, а в журнале устройства имеется сообщение: Script CheckUpdateSimple — New version is available, send notify, сделана ошибка в параметрах отправки (ошибка адреса, пароли и др).


? Проверка обновления RouterOS и отправка сообщения в Telegram, обсуждалось в этой статье. Я надеюсь, что теперь вы сможете контролировать версии RouterOS на устройствах MikroTik. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.

4 комментария к “MikroTik Скрипты: Проверка обновления RouterOS”

  1. Укажите свои значения :local TelegramBotToken «ВашБотИД»; и :local TelegramChatID «ПерсональныйИД_или_ИДгруппы»; не изменяя никаких других значений, все будет работать, проверено на MikroTik RB3011UiAS и RouterOS 6.46.4 (stable).

    Перед там как ваш бот сможет вам присылать сообщения, вы обязательно должны начать с ним диалог.
    Ограничение Телеграм, боты не могут присылать сообщения незнакомым людям.

    Еще одна возможная проблема, если вы пытаетесь запустить скрипт вручную, установите на него разрешения: read, write, test, policy. На скриншоте на сам скрипт стоит разрешение read, т.к. по факту его запускает Sheduler с правами: read, write, test, policy

    Ответить
    • «Еще одна возможная проблема, если вы пытаетесь запустить скрипт вручную, установите на него разрешения: read, write, test, policy. На скриншоте на сам скрипт стоит разрешение read, т.к. по факту его запускает Sheduler с правами: read, write, test, policy»

      Да, действительно, все работает.

      Ответить

Оставьте комментарий