Я пробовал скрипт, но безрезультатно. Он один раз работал, но тело письма было пустым. Потом я начал заново и вставил его в скрипт снова, а теперь я вообще никаких писем не получаю. Я могу отправлять тестовые письма и делать ежедневные бэкапы из своего роутера, так что настройки почты верные.
Скрипт для проверки конкретных новых логов и отправки уведомлений по электронной почте.
Протестировано на RouterOS v5.7+
контейнер для отслеживания времени последней обнаруженной метки:
:global lastTime;
find log entries where the message contains “logged in” or “login failure”
:local currentBuf [ :toarray [ /log find message~“logged in” || message~“login failure” ] ] ;
получить количество логов:
:local currentLineCount [ :len $currentBuf ] ;
если логи были найдены, продолжить
if ($currentLineCount > 0) do={
исходя из количества записей, получить время последней записи
:local currentTime “$[ /log get [ :pick $currentBuf ($currentLineCount -1) ] time ]”;
проверить длину currentTime, если длина равна 15, лог из предыдущего дня и начинается с месяца/дня
:if ([:len $currentTime] = 15 ) do={
обрезать currentTime, чтобы остались только время xx:xx:xx
:set currentTime [ :pick $currentTime 7 15 ];
}
форматировать вывод для тела письма, включая метку времени и сообщение лога
:local output “$currentTime $[/log get [ :pick $currentBuf ($currentLineCount-1) ] message ]”;
функция отправки email
:local sndEmail [:parse "/tool e-mail send to=> eugene@wan4u.co.za > subject="MikroTik alert $currentTime" body="$output"];
функция звукового сигнала
:local doBeep [:parse “:beep;:delay 150ms;:beep;”];
если метка времени не была установлена, длина будет равна 0 (после перезагрузки и т.д.)
:if ([:len $lastTime] < 1 ) do={
обновить lastTime, чтобы соответствовать currentTime
:set lastTime $currentTime ;
отправить email и подать звуковой сигнал $sndEmail; $doBeep;
если lastTime была установлена, продолжить
} else={
если lastTime не соответствует метке времени последней записи
:if ( $lastTime != $currentTime ) do={
обновить lastTime, чтобы соответствовать currentTime
:set lastTime $currentTime ;
отправить email и подать звуковой сигнал $sndEmail; $doBeep;
}
}
}
Есть какие-нибудь идеи, что не так со скриптом?