Accensione remota degli script Mikrotik da Telegram v 2.0

Auguri per la festa trascorsa. Questo argomento è una versione migliorata di ciò che ho scritto nel lontano 2016 qui. In generale, il principio di funzionamento non è cambiato, con l'unica differenza che ora funziona istantaneamente, senza ritardi..

Carichiamo lo script in Mikrotik, cambiamo BotID e ChatID con i nostri e creiamo un piano per esso. Impostiamo il parametro 'Start Time' su startup (Esecuzione dello script all'avvio).

'Interval': 00:00:00
Per il resto, è tutto come prima.
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: comando sconosciuto: $message") keep-result=no } } } on-error={} };

Dopo alcuni anni di utilizzo è stato riscontrato un bug, per ragioni sconosciute i Mikrotik deboli fermano lo script, mentre su quelli più potenti funziona senza interruzioni.

Per questi scopi ho creato un workaround WatchDog. Qui cambiamo il nome dello script in quello che abbiamo indicato sopra e impostiamo un intervallo di riavvio di 5 minuti. Ogni 5 minuti il nostro 'cane da guardia' controllerà lo script e, se non funziona, lo avvierà.

WatchDogT.me

:global scriptname "t.me" :if ([:len [ /system script job find script=$"scriptname"]] > 0) do={ :log info "$scriptname già in esecuzione - termina lo script precedente prima di continuare" :foreach counter in=[ /system script job find script=$"scriptname"] do={ /system script job remove $counter } } /system script run $scriptname

E per finire, lo script è stato preso dal forum di Mikrotik.

Invia argomenti importanti dal log a Telegram.
Inoltra argomenti importanti dal registro a noi su Telegram.

Carichiamo lo script in schedule e impostiamo l'intervallo di riavvio ogni 5 minuti, cambiando BotID e ChatID con i nostri.

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

Otterremo il risultato:

Accensione remota degli script Mikrotik da Telegram v 2.0

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster