RouterOS 定时脚本与自动化运维实战

发布于2026-09-05 11:30 阅读12次 讲解 MikroTik RouterOS 定时脚本与自动化运维的完整实践,涵盖调度器配置、常用脚本示例、自动备份、日志清理、流量监控告警、脚本调试技巧等,帮助企业网络管理员实现日常运维自动化。
# RouterOS 定时脚本与自动化运维实战
> 每天手动备份配置、定期清理日志、盯流量告警,这些重复劳动完全可以交给 RouterOS 的 Scheduler 加脚本自动完成。本文分享一套实用配置。
## 一、自动化能做什么
RouterOS 内置脚本引擎加调度器,能实现很多自动化场景:
- 定时自动备份配置到 FTP 服务器
- 定期清理过期日志释放空间
- 流量超阈值自动告警
- 定时重启拨号链路
- 按时间段自动切换策略
## 二、调度器基础用法
调度器按时间间隔或固定时间点触发脚本:
```bash
# 每 1 小时执行一次脚本 backup-job
/system scheduler add name=backup-job interval=1h on-event="/system backup save name=auto"
# 每天凌晨 3 点执行
/system scheduler add name=daily-clean start-time=03:00:00 interval=1d on-event="/log clean"
# 开机 30 秒后执行一次
/system scheduler add name=on-boot-job start-time=startup interval=0 on-event=":delay 30s"
```
> 调度器字段说明:start-time 首次触发时间,interval 间隔,on-event 触发时执行的命令。
## 三、脚本编写基础
### 变量与输出
```bash
:local uptimeStr [/system resource get uptime]
:log info ("设备已运行: " . $uptimeStr)
:put ("当前时间: " . [/system clock get time])
```
### 条件判断
```bash
:local cpuLoad [/system resource get cpu-load]
:if ($cpuLoad > 80) do={
:log warning ("CPU 负载过高: " . $cpuLoad . "%")
} else={
:log info ("CPU 负载正常: " . $cpuLoad . "%")
}
```
### 循环处理
```bash
:foreach i in=[/ip address find] do={
:put [/ip address get $i address]
}
```
> 注意 RouterOS 脚本中字符串连接用英文句点,变量引用要用美元符号前缀。
## 四、实战一:自动备份配置
把配置定时备份到 FTP 服务器,防止设备故障配置丢失:
```bash
# 创建脚本:自动备份并上传 FTP
:local backupName ("router-" . [/system clock get date] . ".backup")
/system backup save name=$backupName
/tool fetch address=192.168.1.100 src-path=$backupName
user=backup-user password=backup-pass mode=ftp dst-path=/backup/$backupName
:log info ("备份完成: " . $backupName)
```
> 通过 Scheduler 每天 2 点触发,配合保留 7 天策略,滚动覆盖旧备份。
## 五、实战二:日志自动清理
RouterOS 日志默认存在内存中,重启即丢且占空间,定期导出并清理:
```bash
# 每天清理一次日志
:log warning "开始清理日志"
/log clean
:log info "日志清理完成"
```
> 如需留存审计,可先导出:
```bash
# 导出日志到文件再清空
/log print file=log-export
:delay 2s
/log clean
```
## 六、实战三:链路状态监控告警
定期检测 WAN 口连通性,掉线自动发邮件或记录:
```bash
:local wanIp 8.8.8.8
:local pingOk [/ping $wanIp count=3 interval=1s]
:if ($pingOk = 0) do={
:log error ("WAN 断线检测: " . $wanIp . " 不通")
/tool e-mail send to="admin@example.com"
subject="WAN 断线告警"
body="检测到外网不通,请检查。"
}
```
## 七、实战四:流量超限自动限速
检测某接口流量超过阈值,自动套用限速规则:
```bash
:local rxBytes [/interface get ether1 rx-byte]
:local rate ($rxBytes - $lastRx) / 5
:set lastRx $rxBytes
:if ($rate > 90000000) do={
:log warning "流量超过 90Mbps,触发限速"
/queue simple set lan limit-at=50M/50M max-limit=80M/80M
}
```
## 八、调试技巧
脚本出错难排查,几个技巧能帮上忙:
- 终端逐行执行,确认每步结果
- 用 :put 打印中间变量
- 脚本关键点加 :log 记录
- 查看执行日志定位错误行
```bash
# 查看调度器执行记录
/system scheduler print detail
# 手动触发一次脚本验证
/system script run backup-job
```
## 九、注意事项
- 密码等敏感信息不要明文写在脚本里
- 脚本命名规范,便于后期维护
- 备份文件定期异地保存
- 邮件告警需先配置 SMTP 服务器
- 升级 RouterOS 版本前确认脚本兼容性
## 十、小结
用调度器加脚本,把备份、清理、告警、限速这些重复运维工作自动化,网络管理员能把精力放在真正重要的故障处理和架构优化上。