CLI avanzata: scripting, find, :foreach e variabili
Vai oltre i comandi singoli: variabili, cicli :foreach/:for, condizioni, find come lista, scheduler e script per automatizzare la gestione di un parco MikroTik.
Variabili: :local, :global, :set
Il linguaggio di scripting di RouterOS permette di automatizzare quasi tutto. Le variabili si dichiarano con :local (vivono solo nello script corrente) o :global (persistono tra script e sessioni). :set ne cambia il valore, :put le stampa. È la base per scrivere automazioni che leggono lo stato e agiscono di conseguenza.
# Variabile locale stringa e numerica
:local nome "AP-Zona1"
:local soglia 80
# Stampa a console
:put ("Apparato: " . $nome)
# Leggi un valore dalla configurazione in una variabile
:local cpu [/system/resource/get cpu-load]
:put ("CPU load: " . $cpu . "%")
# Variabile globale (persiste dopo la fine dello script)
:global ultimoCheck [/system/clock/get time]Condizioni: :if
# Allerta se la CPU supera la soglia
:local cpu [/system/resource/get cpu-load]
:if ($cpu > 80) do={
:log warning ("CPU alta: " . $cpu . "%")
} else={
:log info "CPU nella norma"
}
# Verifica se un'interfaccia è giù e logga
:if ([/interface/get ether1 running] = false) do={
:log error "ether1 DOWN"
}Cicli: :foreach e :for
Il vero potere arriva combinando find (che restituisce una lista di elementi) con :foreach: puoi iterare su tutte le secret PPPoE, su tutte le interfacce, su tutte le regole firewall ed eseguire un'azione per ciascuna. È così che si fanno le manutenzioni di massa in modo sicuro e ripetibile.
# Logga ogni interfaccia ethernet che è DOWN
:foreach i in=[/interface/ethernet/find] do={
:local nome [/interface/ethernet/get $i name]
:local up [/interface/ethernet/get $i running]
:if ($up = false) do={
:log warning ("Interfaccia DOWN: " . $nome)
}
}
# Disabilita in blocco tutte le secret PPPoE con un certo profilo
:foreach s in=[/ppp/secret/find where profile="sospesi"] do={
/ppp/secret/disable $s
}
# Ciclo numerico :for (es. ping a una serie di host)
:for n from=1 to=5 do={
/ping ("192.168.88." . $n) count=1
}Script salvati e scheduler
Gli script si salvano in /system/script e si eseguono a mano (/system/script/run nome), da un altro script, o automaticamente con lo scheduler (/system/scheduler) a intervalli o orari fissi. Insieme realizzano automazioni reali: backup notturni, controlli di salute, riavvii programmati, sincronizzazioni.
# Salva uno script che logga risorse e link WAN
/system/script/add name=health-check source={
:local cpu [/system/resource/get cpu-load]
:local mem [/system/resource/get free-memory]
:local wan [/interface/get ether1 running]
:log info ("HEALTH cpu=" . $cpu . " freeMem=" . $mem . " wanUp=" . $wan)
:if ($wan = false) do={ :log error "WAN DOWN!" }
}
# Eseguilo ogni 5 minuti
/system/scheduler/add name=sched-health interval=5m \
on-event=health-check comment="health check ogni 5 min"
# Esecuzione manuale per test
/system/script/run health-checkprint as-value: leggere dati in modo strutturato
# as-value restituisce un array di proprietà, navigabile da script
:local lease [/ip/dhcp-server/lease/print as-value where status=bound]
:put [:len $lease] ;# numero di lease attive
# Esempio: contare i clienti PPPoE attivi e loggarli
:local attivi [:len [/ppp/active/find]]
:log info ("Sessioni PPPoE attive: " . $attivi):log/:put al posto dell'azione distruttiva, per vedere COSA verrebbe colpito. Esegui le modifiche di massa in Safe Mode quando lavori da remoto. Usa comment su script e scheduler per documentarli, e non mettere password in chiaro negli script: usa account dedicati con privilegi minimi e, dove serve, variabili globali impostate fuori dal file versionato.Continua con
Configura senza fatica con l'AI
In WispOS l'agente AI genera la configurazione RouterOS dalle tue parole e un tutor ti guida passo passo.
Prova WispOS