@Rampage1410

Как запустить выполнение действия в скрипте Mikrotik в зависимости от записи в логах?

Всем привет!
Помогите пожалуйста дописать скрипт.
Есть начало скрипта:
:local LOGO 192.168.88.6
:local checkLAN [/ping $LOGO count=4 interface=bridge]
:if ($checkLAN = 0) do={
/log info LinkDown
} else={
/log info LinkUp
}

И тут я застрял...
Нужно чтобы скрипт дальше прочитал логи за последнюю минуту и если он найдет запись LinkUp то стартанул:
/system script run WOL
  • Вопрос задан
  • 558 просмотров
Решения вопроса 2
Если реально нужно перехватывать события в логах реалтайме, то можно придумать один способ, правда весьма извратный и расточительный. Нужно настроить отсылку логов Syslog на локальный адрес роутера, в правилах файрвола в цепочке создать правило, которое будет перехватывать нужное сообщение с логами (по полю Content) и создавать динамическую запись address-list, а в шедулере проверять наличие такой записи и по её появлении делать какие-то действия.
Концепт-конфиг, которой отслеживает появление в логе отправленной из какого-либо скрипта или командной строки строчки "testtest" (правила файрвола должны быть до правила, разрешающего трафик established+related):
# создаем интерфейс, на который можно повесить ip-адрес
/interface bridge add name=logging-bridge
# создаем локальный ip-адрес, на который будем слать Syslog
/ip address add address=127.0.0.2 interface=logging-bridge
# прописываем Syslog-сервер, на который будут отправляться логи
/system logging action add name=remote2logwarch remote=127.0.0.2 target=remote
# задаем отправку логов ни этот сервер, в topics прописываем нужные разделы вместо script
/system logging add action=remote2logwarch topics=script
# создаем правило, которое создает запись в address-list при наличии нужной подстроки в полученном syslog-пакете
/ip firewall filter add action=add-src-to-address-list address-list=_logwatch_testtest address-list-timeout=1m chain=input content=testtest dst-address=127.0.0.2 dst-port=514 protocol=udp
# создаем шедулер, который проверяет наличие нужной записи в address-list и выполняет какие-либо действия
/system scheduler add interval=1s name=logwatch_testtest_1sec on-event=":if [ /ip firewall address-list find where dynamic && list=\"_logwatch_testtest\" ] do={ /ip firewall address-list remove [find dynamic && list=\"_logwatch_testtest\"]; /log info \"log entry catched!\" }\r\n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=jan/01/2021 start-time=00:00:00
Ответ написан
Комментировать
@Rampage1410 Автор вопроса
Затупил я жестко. Нужно было всего лишь вместо:
else={
/log info LinkUp
}
сделать :
else={
/system script run WOL
}
и все заработало)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы