运行 doctor
运行 openclaw doctor 以修复并迁移 OpenClaw 安装。本页介绍该命令、其自动化标志以及只读 lint 模式。
当系统代理运行 Doctor 时,它会使用同一 OpenClaw 安装中的独立进程。这样,批量诊断检查就可以在不阻塞 Gateway 事件循环的情况下运行。这会使用现有的 --non-interactive 行为,包括其安全迁移;它不会启用额外修复。一旦启动,Doctor 会在被取消的调用方结束之前完成并释放其资源,因此取消操作不会放弃正在进行的迁移。
快速开始¶
无头与自动化模式¶
无需提示即可接受默认的非服务修复,并在服务保留和安装漂移规则下进入维护。
无需提示即可应用建议的非服务修复(--repair 是别名),并在服务保留和安装漂移规则下进入维护。
同时应用激进的配置/状态修复。修复维护使用相同的服务保留和安装漂移规则;从目标安装运行 openclaw gateway install --force 以替换其启动器和受管环境。
无提示运行,仅应用安全迁移(配置规范化 + 磁盘状态移动)。跳过需要人工确认的重启/服务/沙箱操作。检测到旧版状态迁移时仍会自动运行。添加 --fix 可在无提示的情况下执行所有受支持的启动阻塞修复,包括工作区设置、会话存储、exec 审批和审计架构迁移。显式修复会在数据库快照前检查所有权;另一个活动所有者必须先停止,修复才能继续。格式错误或冲突的保留文件需要错误中指定的手动恢复。
当共享数据库已是最新时,准备阶段会保留正在运行的 Gateway 的工作进程环境可用。实际的架构修复会在后续维护继续之前退役旧的数据库资源,包括修复清理失败时。
设置 OPENCLAW_GATEWAY_STARTUP_TRACE=1 时,Doctor 会将各阶段计时(doctor.* 和 cli.bootstrap.* 行)输出到 stderr。
在写入前查看更改,请先打开配置文件:
只读 lint 模式¶
openclaw doctor --lint 是 openclaw doctor --fix 的自动化友好版本。它们共享相同的 Doctor 规则注册表,但它们选择或执行规则的方式不同:
| 模式 | 提示 | 写入配置/状态 | 输出 | 用途 |
|---|---|---|---|---|
openclaw doctor |
是 | 是,安全迁移和已确认的修复 | 友好的健康报告 | 引导式检查和修复 |
openclaw doctor --json |
否 | 否 | JSON 建议报告 | 机器可读的运维检查 |
openclaw doctor --fix |
有时 | 是,遵循修复策略 | 友好的修复日志 | 应用已批准的修复 |
openclaw doctor --lint |
否 | 否 | 结构化发现 | CI、预检和审查门禁 |
默认 doctor --lint 运行广泛安全的自动化配置文件:这些检查是静态的、本地的,并且适用于 CI 或预检输出。它会跳过需启用的检查,这些检查属于建议性、环境敏感、依赖实时服务、账户/工作区清单或历史清理。当你想要完整的已注册 lint 审计(包括这些需启用的检查)时,使用 doctor --lint --all;或针对特定检查使用 --only <id>。
doctor --fix 不使用 lint 默认配置文件,也不接受 --all。它运行 Doctor 的有序修复路径:现代健康检查可以提供可选的 repair() 实现,而旧区域仍使用其传统 Doctor 修复流程。一些 lint 发现仅用于诊断,因此出现在 --lint --all 中的检查并不意味着 --fix 会修改该区域。该契约将 detect()(报告发现)与 repair()(报告更改/差异/副作用)分开,这为未来的 doctor --fix --dry-run 保留了路径,而不会将 lint 检查变成变更规划器。
一些内置检查在内部默认禁用,以便它们仍可用于 --all、--only 和 Doctor 修复流程,而不会成为默认 doctor --lint 自动化配置文件的一部分。发现严重级别仍按每个发现输出(info、warning 或 error);默认选择不是严重级别。
openclaw doctor --lint
openclaw doctor --lint --severity-min warning
openclaw doctor --lint --json
openclaw doctor --lint --all
openclaw doctor --lint --only core/doctor/gateway-config --json
JSON 输出字段:
schemaVersion:机器可读 lint 信封的版本;在解析其他字段前应先基于此字段分支ok:是否有发现达到所选严重级别阈值checksRun/checksSkipped:计数(因配置文件、--only或--skip跳过)findings:结构化诊断,包含checkId、severity、message,以及可选的path、line、column、ocPath、source、target、requirement、fixHint
退出码:
| 代码 | 含义 |
|---|---|
0 |
没有达到或超过所选阈值的检测结果 |
1 |
一个或多个检测结果达到所选阈值 |
2 |
在能够输出检测结果之前发生命令/运行时故障 |
这些基于阈值的退出码属于显式 --lint 模式,无论是否带有 --json。单独的 openclaw doctor --json 在生成其载荷后保留普通 Doctor 的建议性退出码 0;机器消费者应读取 ok 和 findings。在输出之前的致命错误仍保持非零。
在 openclaw update 期间,无法删除 Doctor 的一次性 lint 快照会记录为更新警告,并且不会阻止更新。独立运行的 doctor --lint 仍会将该清理失败报告为错误。更新会保留检查的实际检测结果;清理警告不会掩盖其他失败。
标志:
--severity-min info|warning|error(默认warning):同时控制打印内容以及导致非零退出的内容。--all:运行所有已注册的 lint 检查,包括被排除在默认自动化集合之外的可选启用检查。--only <id>(可重复):仅运行指定的检查 id;未知 id 会作为错误检测结果报告。--skip <id>(可重复):排除某个检查,同时保持其余运行处于活动状态。--severity-min、--all、--only和--skip需要--lint。单独的--json可用于建议性机器可读报告;除非另一种机器模式控制输出,否则--fix会拒绝它。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw