Отдалечено включване на скриптове Mikrotik от Telegram v 2.0

Честит празник на всички. Тази тема е по-добра версия на това, което писах преди години през 2016 тук Принципът на работа в общи линии е същият, с единствената разлика, че сега работи мигновено без забавяне..

Зареждаме скрипта в Mikrotik, променяме BotID и ChatID на нашите и създаваме разписание за него. Настройваме параметъра „Start Time“ на стартиране (Стартиране на скрипта при старт.)

„Интервал“: 00:00:00
В останалото всичко е както беше.
Telegram-v2

:delay 10 :global mtIdentity [\/system identity get name]; :global botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ; :global myChatID "YYYYYY" ; :local chatId 0; :local messageId 0;:local parse do={ :local startLoc ([:find $content $variable -1] + [:len $variable] + 2); :local commaLoc ([:find $content "," $startLoc] - 1 + 1); :local braceLoc ([:find $content "}" $startLoc] - 1 + 1); :local endLoc $commaLoc; :local startSymbol [:pick $content $startLoc] :if ($braceLoc != 0 and ($commaLoc = 0 or $braceLoc < $commaLoc)) do={ :set endLoc $braceLoc; }; :if ($startSymbol = "{") do={ :set endLoc ($braceLoc + 1); }; :if ($quotas = true) do={ :set startLoc ($startLoc + 1); :set endLoc ($endLoc - 1); } :if ($endLoc 30) do={ :set messageId ([$parse content=$content variable="update_id"] + 1) :local message [$parse content=$content variable="text" quotas=true] :local chat [$parse content=$content variable="chat"] :local chatId [$parse content=$chat variable="id"] :if (($chatId = $myChatID) and ([\/system script find name=$message] != "")) do={ :system script run $message; } else={ :tool fetch url=("https:\/\/api.telegram.org\/$botID\/sendmessage?chat_id=$chatId&text=$mtIdentity: Unknown command: $message") keep-result=no } } } on-error={} };

През последните години се откри бъг, по неясни причини слаби Mikrotik спират скрипта, докато на по-мощни работи без прекъсване.

За тези цели разработих решение WatchDog. тук променяме името на скрипта на това, което посочихме по-горе. и задаваме интервал за рестартиране 5 минути. На всеки 5 минути нашата

смотряща собака" ще проверява скрипта и, ако не работи, ще го стартира.

WatchDogT.me

:global scriptname "t.me"
:if ([:len [\/system script job find script=$"scriptname"]] > 0) do={
:log info "$scriptname Вече работи - убивам стария скрипт преди да продължим"
:foreach counter in=[\/system script job find script=$"scriptname"] do={
\/system script job remove $counter
}
}
\/system script run $scriptname

И за десерт, скриптът е взет от форума на Mikrotik.
Изпраща важни теми от логовете в телеграм.

Добавяме скрипта в графика и задаваме интервал за рестартиране на всеки 5 минути, променяме BotID и ChatID на нашите.

Notify-log

:global lastTime
:global output
:global mtIdentity [ /system identity get name ];
:global botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ;
:global myChatID "YYYYYY" ;

:local LogGet [ :toarray [ /log find topics~"critical" || message~"login failure" || message~"[Ff]ailure" ] ] ;
:local LogtLineCount [ :len $LogGet ] ;
if ($LogtLineCount > 0) do={
   :local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
   :if ([:len $currentTime] = 10 ) do={
      :set currentTime [ :pick $currentTime 0 10 ];
   }
   :set output "$currentTime - $[ /log get [ :pick $LogGet ($LogtLineCount-1) ] message ]";
   :if (([:len $lastTime]  0) && ($lastTime != $currentTime))) do={
      :set lastTime $currentTime ;
         :tool fetch url=("https://api.telegram.org/$botID/sendmessage?chat_id=$myChatID&text="$mtIdentity" :  $output") keep-result=no
   }
}

Ще получим резултат:

Отдалечено включване на скриптове Mikrotik от Telegram v 2.0

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster