You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MikroTik脚本中实现成功即终止循环并添加重试机制?

解决MikroTik域名解析脚本的重试与提前退出问题

针对你的需求,这里提供修改后的脚本,实现单个域名失败重试3次、任一域名解析成功立即终止所有循环的功能:

:local piholeDNS "192.168.xxx.xx"
:local testDomains {"example.com"; "test.com"; "another.net"}  # 替换成你的测试域名列表
:local success false

# 遍历每个测试域名
:foreach domain in $testDomains do={
    # 对当前域名重试3次(可修改to=4调整为4次)
    :for retry from=1 to=3 do={
        :do {
            :resolve $domain server $piholeDNS
            # 解析成功,标记状态并跳出所有循环
            :set success true
            :break 2  # 2表示跳出两层循环(重试循环+域名遍历循环)
        } on-error={
            # 解析失败,若不是最后一次重试则等待1秒再试
            :if ($retry < 3) do={
                :delay 1s
            }
        }
    }
    # 如果已经成功,无需继续遍历后续域名
    :if ($success) do={
        :break
    }
}

# 后续可根据success状态执行逻辑,比如打印结果
:put "解析结果:$success"

关键逻辑说明

  • 重试机制:用:for循环控制每个域名的重试次数,失败后延迟1秒再重试,避免频繁请求。
  • 提前退出:解析成功时用:break 2直接跳出内层重试循环和外层域名遍历循环,也可在域名重试结束后判断success状态提前终止foreach循环。
  • 状态初始化:默认success设为false,只有解析成功才会改为true,修复原脚本未初始化变量的潜在问题。

原脚本的问题修正

  1. 补全success变量的初始值,避免逻辑异常。
  2. 新增重试循环,解决单个域名仅尝试一次的问题。
  3. 添加成功后立即终止循环的逻辑,提升脚本执行效率。

内容的提问来源于stack exchange,提问作者Safiq Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 07:07:09