一、创建 WOL 脚本
这个脚本用于定时唤醒局域网内的设备,假设设备的 IP 地址为 10.10.10.39,MAC 地址为 A8:B8:E0:04:D1:DB,且设备的网卡连接在网桥 bridge1 上。
注意事项:
- Ping 可靠性:单次
ping可能由于网络抖动失败,建议增加count=3,提高可靠性。 - 初始延迟:发送 WOL 后立即检查设备是否上线可能太快,建议延迟 30 秒,以确保设备有足够时间启动。
- 设备检查次数:最多检查 20 次,每次间隔 30 秒,避免过多重复请求。
WOL 脚本代码:
:local targetIP "10.10.10.39" # 目标设备 IP 地址
:local macAddress "A8:B8:E0:04:D1:DB" # 目标设备 MAC 地址
:local interface "bridge1" # 设备连接的网桥接口
# 检查设备是否已经在线
:if ([/ping address=$targetIP count=3] > 0) do={
:log info "Device is already online, no need to send WOL."
} else={
# 发送 WOL (Wake On LAN) 信号
/tool wol mac=$macAddress interface=$interface
:log info "WOL sent to $targetIP"
# 等待设备上线,最多尝试 20 次,每次间隔 30 秒
:local counter 0
:local isOnline false
:while ($counter < 20) do={
:if ([/ping address=$targetIP count=3] > 0) do={
:log info "WOL: Device is online, stopping retries."
:set isOnline true
:break
} else={
:set counter ($counter + 1)
:delay 30s # 每 30 秒检查一次
}
}
# 如果设备依然不可达,再次尝试发送 WOL
:if ($isOnline = false) do={
:log warning "WOL: First attempt failed, retrying WOL."
/tool wol mac=$macAddress interface=$interface
}
}
脚本解析:
- 目标设备信息:
targetIP:目标设备的 IP 地址。macAddress:目标设备的 MAC 地址。interface:设备连接的网桥接口。
- 设备在线检查:
- 使用
ping检查设备是否在线,count=3增强可靠性。如果设备在线,则跳过唤醒过程。
- 唤醒设备:
- 使用
tool wol命令发送 WOL 信号唤醒设备。
- 设备状态检查:
- 使用
ping检查设备是否在 30 秒内成功上线。如果设备成功上线,退出循环;如果 20 次尝试后依然不可达,则再次尝试发送 WOL。
- 日志记录:
- 脚本中通过
:log命令记录信息,方便追踪脚本执行情况。
二、设置调度任务
为了让此脚本每天定时运行,你可以使用 RouterOS 的调度任务功能,设置每天 6 点自动执行该脚本。以下是创建调度任务的命令:
/system scheduler add name="WOL_SA6400" start-time=06:00:00 interval=1d on-event="/system script run wol_SA6400_script"
配置说明:
name="WOL_SA6400":任务名称,方便识别和管理。start-time=06:00:00:每天 6:00 执行此任务。interval=1d:任务执行间隔为 1 天。on-event="/system script run wol_SA6400_script":在指定时间执行你创建的脚本wol_SA6400_script。
确保脚本名称与调度任务一致:
确保你在创建脚本时,命名为 wol_SA6400_script,或者根据你的实际脚本名称进行修改。
进一步优化建议:
- 延迟调整:
- 根据实际网络环境,可能需要根据设备的启动时间调整
:delay 30s延迟。 - 若设备的启动时间较长,建议增加等待时间。
- 失败重试机制:
- 如果设备在多次尝试后仍然无法连接,可以进一步增加失败重试次数,或者添加通知功能,告知管理员设备未能成功唤醒。
- 日志通知:
- 如果需要可以将
:log info和:log warning命令替换为发送邮件或短信通知,以便及时了解脚本执行情况。
- 检查网络连接状态:
- 可以在脚本中加入更复杂的网络状态检查,比如设备是否正确连接到网桥、WOL 是否正确广播等。
总结
通过上述配置,RouterOS 路由器能够每天定时自动唤醒指定的设备。该脚本通过定时检查设备在线状态并发送 WOL 信号,确保设备能够按时唤醒。如果设备无法唤醒,脚本会自动重试。这种方式对于需要定时唤醒的场景非常有用,比如远程管理、自动化备份等任务。