RouterOS定时唤醒脚本

一、创建 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
    }
}

脚本解析:

  1. 目标设备信息
  • targetIP:目标设备的 IP 地址。
  • macAddress:目标设备的 MAC 地址。
  • interface:设备连接的网桥接口。
  1. 设备在线检查
  • 使用 ping 检查设备是否在线,count=3 增强可靠性。如果设备在线,则跳过唤醒过程。
  1. 唤醒设备
  • 使用 tool wol 命令发送 WOL 信号唤醒设备。
  1. 设备状态检查
  • 使用 ping 检查设备是否在 30 秒内成功上线。如果设备成功上线,退出循环;如果 20 次尝试后依然不可达,则再次尝试发送 WOL。
  1. 日志记录
  • 脚本中通过 :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,或者根据你的实际脚本名称进行修改。


进一步优化建议:

  1. 延迟调整
  • 根据实际网络环境,可能需要根据设备的启动时间调整 :delay 30s 延迟。
  • 若设备的启动时间较长,建议增加等待时间。
  1. 失败重试机制
  • 如果设备在多次尝试后仍然无法连接,可以进一步增加失败重试次数,或者添加通知功能,告知管理员设备未能成功唤醒。
  1. 日志通知
  • 如果需要可以将 :log info:log warning 命令替换为发送邮件或短信通知,以便及时了解脚本执行情况。
  1. 检查网络连接状态
  • 可以在脚本中加入更复杂的网络状态检查,比如设备是否正确连接到网桥、WOL 是否正确广播等。

总结

通过上述配置,RouterOS 路由器能够每天定时自动唤醒指定的设备。该脚本通过定时检查设备在线状态并发送 WOL 信号,确保设备能够按时唤醒。如果设备无法唤醒,脚本会自动重试。这种方式对于需要定时唤醒的场景非常有用,比如远程管理、自动化备份等任务。