Auguri a tutti per il recente festeggiamento. Questo argomento rappresenta una versione migliorata .
In generale, il principio di funzionamento non è cambiato, con l'unica differenza che ora opera istantaneamente senza ritardi.
Carichiamo lo script in Mikrotik, cambiamo BotID e ChatID con i nostri e creiamo un programma per esso. Impostiamo il parametro «Start Time» su startup (Avvio 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 message ([$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={}
};Dopo alcuni anni di utilizzo, è stato rilevato un bug: per motivi sconosciuti, alcuni Mikrotik deboli interrompono il script, mentre quelli più potenti funzionano senza interruzioni.
Per risolvere questo problema, ho creato una soluzione temporanea chiamata WatchDog. Qui cambiamo il nome dello script con quello indicato sopra e impostiamo l'intervallo di riavvio a 5 minuti. Ogni 5 minuti, il nostro "cagnolino guardiano" controllerà lo script e, se non funziona, lo riavvierà.
WatchDogT.me
:global scriptname "t.me"
:if ([:len [/system script job find script=$"scriptname"]] > 0) do={
:log info "$scriptname già in esecuzione - terminando il vecchio script prima di continuare"
:foreach counter in=[/system script job find script=$"scriptname"] do={
/system script job remove $counter
}
}
/system script run $scriptnameE come dessert, lo script è stato preso da un forum Mikrotik.
Invia argomenti importanti dai log a Telegram.
Carichiamo lo script nel programma e impostiamo un intervallo di riavvio ogni 5 minuti, cambiando il BotID e il ChatID con i propri.
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
}
}Riceveremo un risultato:

Fonte: habr.com
