Afstandsbediening van Mikrotik-scripts vanuit Telegram v 2.0

Iedereen gefeliciteerd met de afgelopen feestdag. Dit onderwerp is een verbeterde versie van wat ik hier in 2016 schreef. Over het algemeen is het principe van werking niet veranderd, met als enige verschil dat het nu onmiddellijk zonder vertragingen werkt..

We plaatsen het script in Mikrotik, veranderen BotID en ChatID naar de onze en maken er een schema voor aan. We stellen de "Starttijd" in op startup (Het script wordt bij de opstart uitgevoerd.)

"Interval": 00:00:00
Verder is alles zoals het was.
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={} };

Na enkele jaren gebruik is er een bug ontdekt; om onduidelijke redenen stoppen zwakke Mikrotik-apparaten om een script, terwijl het op krachtigere apparaten zonder onderbreking draait.

Voor deze doeleinden heb ik een noodoplossing WatchDog gemaakt. Hier wijzigen we de naam van het script naar de naam die hierboven werd genoemd en stellen we het herstartinterval in op 5 minuten. Elke 5 minuten zal onze "watchdog" het script controleren, en als dit niet werkt, zal het het opnieuw starten.

WatchDogT.me

:global scriptname "t.me" :if ([:len [/system script job find script="$scriptname"]] > 0) do={ :log info "$scriptname is al aan het draaien - oude script beƫindigen voordat we verder gaan" :foreach counter in=[/system script job find script="$scriptname"] do={ /system script job remove $counter } } /system script run $scriptname

En als toetje, het script is van het Mikrotik-forum gehaald.

Het verzendt belangrijke onderwerpen uit het logboek naar onze Telegram.
Verzendt belangrijke onderwerpen uit de log naar ons in Telegram.

Plaats het script in de planning en geef het interval in voor herstart elke 5 minuten, vervang BotID en ChatID door de jouwe.

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
   }
}

We krijgen het resultaat:

Afstandsbediening van Mikrotik-scripts vanuit Telegram v 2.0

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster