先把「更新订阅」拆成五个检查点
OpenClash 的订阅更新不是单纯把一个文件下载到路由器。官方实现会读取订阅项、发起请求、测试配置、用 YAML 校验内容,检查是否存在可用的代理字段,再生成或写入对应配置。某一个早期阶段成功,不代表后面的文件一定可以被内核加载。
| 阶段 | 成功只能说明 | 失败时优先看 |
|---|---|---|
| URL 请求 | 路由器拿到了 HTTP 响应 | DNS、TLS、响应码、重定向 |
| 内容识别 | 响应像一份配置 | 是否返回登录页、错误文本或空内容 |
| YAML/内核校验 | 语法和关键结构能被解析 | 错误行、缩进、不支持字段 |
| 写入配置 | 新文件或处理结果已落盘 | 空间、权限、文件名和存储错误 |
| 选中并加载 | 当前内核真正采用了新配置 | 活动配置路径、启动日志与端口冲突 |
用这五层去读日志,比围绕一个红色提示不断更换 DNS、转换服务和内核更有效。先找到第一个失败阶段,后面的错误往往只是连锁结果。
手动更新前保住可用配置和订阅私密
路由器上的网络变更容易把自己的排查通道一起切断。在更新前,备份当前能启动的 YAML、OpenClash UCI 设置和相关自定义文件,记下活动配置名。备份放在与路由器独立的可信位置,但不要上传到公开仓库或群聊。
- 校准系统时间:时间大幅错误可以破坏 HTTPS 证书验证,可先检查 NTP 是否已同步。
- 检查可用空间:配置、规则集和临时文件都需要写入,下载成功不能排除后续写入失败。
- 确认 WAN 和 DNS:在不依赖本次待更新配置的情况下,路由器本身应能解析订阅域名并建立 HTTPS。
- 保护 URL:订阅链接常含 Token。复制日志或截图时应遮住查询参数,不要用公开在线解析站“测试”。
不要删除唯一可用的配置后再排查。保留旧配置可以验证插件和内核仍能工作,也为查阅官方文档保留一条网络通道。
执行一次可观察的手动更新
暂时关闭订阅自动更新,只选中一个订阅来测试。在配置订阅页面核对启用状态、配置名、订阅地址、User-Agent 和是否使用转换。先记录原值,不要为了“提高成功率”同时更换多个转换地址或自定义模板。
- 清空或标记当前日志的起点,记下准备点击更新的时间。
- 对单个订阅发起一次更新,等待后端流程结束,不连续刷新页面或重复点击。
- 从日志顶部开始,找到该订阅的下载、测试、格式校验、无代理字段或写入提示。
- 更新成功时核对配置文件时间与大小,并确认 OpenClash 当前选中的路径是这一份。
- 最后重启或重载内核,查看第一条配置解析错误,再用一条连接验证实际流量。
官方脚本包含「下载成功后测试配置」、「格式校验失败」以及「更新配置没有代理字段」等分支。这也说明页面按钮已返回不等于新配置已通过所有后端检查。
对照日志关键句,只修当前失败层
| 日志或现象 | 常见含义 | 下一步 |
|---|---|---|
| DNS / connect / TLS 错误 | 请求尚未拿到有效订阅内容 | 检查路由器自身 DNS、时间和目标域名可达性 |
| HTTP 响应但格式校验失败 | 返回的可能是 HTML、空文本或不兼容的 YAML | 检查响应类型、订阅有效期与 User-Agent |
| Has No Proxy Field | 内容没有脚本预期的代理节点结构 | 确认服务商返回的是 OpenClash/Mihomo 可用格式 |
| Write file failed | 处理后内容无法写入 | 检查空间、文件系统、目录权限和文件名 |
| 更新后仍是旧节点 | 新文件可能已写入,但当前选中路径或内核未重载 | 对照活动配置与启动日志 |
如果使用了订阅转换,新增了一层外部依赖:原订阅可用,但转换服务故障、模板无法获取或参数不兼容,都可以让最终更新失败。对照测试时可在保存原设置的前提下,尝试服务商直接提供的 Mihomo/Clash YAML,以判断是不是转换层的问题。
分享日志前要特别检查 URL。官方脚本的调试信息可能包含订阅地址或处理参数,所以不能将整段日志原样粘贴到公开 issue。
恢复手动更新后,再重新开启定时任务
修复的完成条件应包括:日志显示单个订阅完成下载与校验;新文件已安全写入;当前配置路径指向它;内核重载无错;节点或规则的一个可观察变化已出现。只看页面弹出提示不足以证明整条链路。
官方 issue #5239 提出过界面可能没有将后端返回的失败清晰呈现给用户的具体报告。这类 issue 说明不应只依赖按钮的瞬时反馈,但也不能推导出每次更新失败都是同一个界面缺陷。仍需用当前版本的后端日志判断。
- 保留已验证的旧配置和修复后新配置,不要立即清理回退材料。
- 手动重复更新一次,确认不依赖偶然的 DNS 缓存或临时转换结果。
- 将自动更新周期设为合理频率,错开路由器重启和网络拨号时段。
- 下一次定时任务后检查日志时间、新文件时间与内核状态,完成一次自动链路验收。
如果问题在相同阶段稳定重现,再向 OpenClash 项目报告:附上插件版本、OpenWrt 版本与架构、重现时间、已隐去私密的最小日志和是否启用转换。这比只写“点更新没反应”更容易获得可验证的答复。
官方来源与版本边界
- github.com/vernesong/OpenClash
- github.com/vernesong/OpenClash/blob/master/luci-app-openclash/root/usr/share/openclash/openclash.sh
- github.com/vernesong/OpenClash/blob/master/luci-app-openclash/luasrc/view/openclash/update_config.htm
- github.com/vernesong/OpenClash/issues/5239
版本号、文件名和界面文字可能随项目更新而变化,操作前请以链接中的项目文档为准。