Tous mes vœux pour la fête passée. Ce sujet est une version améliorée de ce que j'ai écrit en 2016 ici. .
Nous chargons le script dans Mikrotik, changeons BotID et ChatID pour les nôtres et créons un emploi pour cela. Nous définissons le paramètre « Start Time » sur startup (Lancer le script au démarrage).
« Intervalle » : 00:00:00
Pour le reste, tout est comme avant.
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={} };
Après quelques années d'utilisation, un bug a été identifié : pour des raisons inconnues, certains Mikrotik faibles arrêtent le script, tandis que sur des modèles plus puissants, cela fonctionne sans interruption.Pour ces besoins, j'ai bricolé un correctif WatchDog. Ici, nous changeons le nom du script en celui indiqué ci-dessus et nous définissons un intervalle de redémarrage de 5 minutes. Toutes les 5 minutes, notre « chien de garde » vérifiera le script et, s'il ne fonctionne pas, il le relancera.
WatchDogT.me
:global scriptname "t.me" :if ([:len [ /system script job find script=$"scriptname"]] > 0) do={ :log info "$scriptname déjà en cours d'exécution - terminaison de l'ancien script avant de continuer" :foreach counter in=[ /system script job find script=$"scriptname"] do={ /system script job remove $counter } } /system script run $scriptname
Et pour finir, ce script a été pris sur le forum Mikrotik.Il envoie des sujets importants du journal vers notre Telegram.
Il envoie des sujets importants de notre journal sur Telegram.
Nous ajoutons le script au planning et spécifions un intervalle de redémarrage toutes les 5 minutes, en remplaçant BotID et ChatID par les nôtres.
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
}
}Nous allons obtenir le résultat :

Source : habr.com
