Скрипты RouterOS
Основы скриптинга
RouterOS Scripting Language — встроенный язык для автоматизации задач. В RouterOS 7 синтаксис CLI изменён: пути разделяются символом / вместо пробела.
| RouterOS 6 | RouterOS 7 |
|---|---|
| /ip address print | /ip/address/print |
| /interface ethernet set ether1 | /interface/ethernet/set ether1 |
| /system script run | /system/script/run |
Переменные и типы данных
# Локальные переменные
:local myName "gw-office"
:local myIP 192.168.88.1
:local isEnabled true
:local counter 0
# Глобальные переменные (доступны между скриптами)
:global lastBackupDate
# Массивы
:local ports {"ether1";"ether2";"ether3"}
# Цикл foreach
:foreach port in=$ports do={
:put "Processing $port"
}
# Условия
:if ($counter > 10) do={
:put "Counter exceeded"
} else={
:set counter ($counter + 1)
}
# Получение данных из системы
:local identity [/system/identity/get name]
:local uptime [/system/resource/get uptime]
:local cpuLoad [/system/resource/get cpu-load]RouterOS Script
Scheduler
# Запуск скрипта каждый день в 3:00
/system/scheduler/add name=daily-backup start-time=03:00:00 interval=1d on-event="/system/script/run backup-script"
# Запуск при старте системы
/system/scheduler/add name=on-boot start-time=startup on-event="/system/script/run startup-checks"
# Каждые 5 минут
/system/scheduler/add name=health-check interval=5m on-event="/system/script/run check-tunnels"RouterOS CLI
Netwatch
Netwatch мониторит доступность хостов и выполняет действия при изменении статуса.
# Мониторинг шлюза провайдера с переключением на резерв
/tool/netwatch/add host=203.0.113.1 type=icmp interval=10s timeout=3s up-script=":log info \"ISP1 UP\"; /ip/route/set [find comment=\"ISP1\"] disabled=no" down-script=":log warning \"ISP1 DOWN\"; /ip/route/set [find comment=\"ISP1\"] disabled=yes"RouterOS CLI
Практические примеры
Автоматический бэкап с отправкой на email
# Создаём скрипт бэкапа
/system/script/add name=backup-script source={
:local date [/system/clock/get date]
:local identity [/system/identity/get name]
:local filename "$identity-$date"
# Создаём бэкап и экспорт
/system/backup/save name=$filename
/export file=$filename
# Отправляем на email
/tool/e-mail/send to="admin@example.com" subject="Backup: $identity ($date)" body="Auto backup attached" file="$filename.backup,$filename.rsc"
# Удаляем старые файлы через 7 дней
:delay 5s
:foreach f in=[/file/find where name~"backup"] do={
:local fdate [/file/get $f creation-time]
# ... проверка возраста файла
}
}
# Расписание: ежедневно в 3:00
/system/scheduler/add name=nightly-backup start-time=03:00:00 interval=1d on-event="/system/script/run backup-script"RouterOS Script
Мониторинг температуры CPU
/system/script/add name=temp-monitor source={
:local temp [/system/health/get [find name=cpu-temperature] value]
:if ($temp > 80) do={
:log error "CPU temperature critical: $temp C"
/tool/e-mail/send to="admin@example.com" subject="ALERT: High CPU temp on $[/system/identity/get name]" body="Temperature: $temp C"
}
}RouterOS Script
Отладка скриптов: Используйте :put для вывода в терминал и :log info для записи в системный лог. Логи доступны через /log/print или в Winbox → Log.