MikroTik скрипт запускающий проверку наличия обновления RouterOS. Если обновление системы найдено, отправляет сообщение в Telegram, иначе записывает лог о отсутствии обновлений.
? Для работы скрипта вы должны иметь Токен Телеграм бота и ID чата или персональный ID. Создание Telegram бота и получение необходимых ID не является темой этой статьи.
Сообщение Телеграм содержит:
- идентификатор устройства;
- сообщение с указанием версии обновления;
- ссылку на официальный сайт с описанием изменений;
- информацию о текущей версии устройства и ветку релиза.
Содержание
- Как изменить идентификатор устройства
- Создать скрипт «Проверка обновления RouterOS» (простой)
- Создать скрипт «Проверка обновления RouterOS» (функции)
- Добавить запуск скрипта в расписание
- Решение проблем
Статья на других языках:
?? — 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.";
Если обновлений не обнаружено, скрипт выводит сообщение в лог. Так можно понять, что срипт работает успешно.
Создать скрипт «Проверка обновления 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
Теперь обновление какого-то устройства не будет забытым, каждое устройство MikroTik будет ежедневно проверять и напоминать о необходимости обновления!
Решение проблем
Диагностика работы скрипта (сообщения в журнале устройства):
- Script CheckUpdateSimple — Run — скрипт начал работу;
- Script CheckUpdateSimple — New version is available, send notify — обновление найдено, запущена отправка уведомлений;
- Script CheckUpdateSimple — System is already up to date — обновлений не найдено;
- Script CheckUpdateSimple — Completed — скрипт выполнен корректно.
Скрипт не работает при запуске вручную или из планировщика заданий
- Проверьте права запуска скрипта, они должны соответствовать указанным в статье (в ROS 6.47.8 замечена ошибка — максимальные права иногда вызывают ошибку доступа);
- Внимательно проверьте названия скриптов которые вызываются (статьи обновляются и названия скриптов могут измениться);
Уведомления не работают
Если существует более новая версия RouterOS, а в журнале устройства имеется сообщение: Script CheckUpdateSimple — New version is available, send notify, сделана ошибка в параметрах отправки (ошибка адреса, пароли и др).
? Проверка обновления RouterOS и отправка сообщения в Telegram, обсуждалось в этой статье. Я надеюсь, что теперь вы сможете контролировать версии RouterOS на устройствах MikroTik. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.
Большое спасибо за оставленный ответ, рад что все получилось.
Укажите свои значения :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»
Да, действительно, все работает.
Скрипт не работает