故障排除 🔧
当 OpenClaw 出现异常时,这里是修复方法。
如果你只想快速排查,请从 FAQ 的前 60 秒开始。本页面深入探讨运行时故障和诊断。
提供商特定快捷方式:/channels/troubleshooting
状态与诊断
快速排查命令(按顺序):
| 命令 | 它告诉你什么 | 何时使用 |
|---|---|---|
openclaw status | 本地摘要:OS + 更新、网关可达性/模式、服务、智能体/会话、提供商配置状态 | 首次检查,快速概览 |
openclaw status --all | 完整本地诊断(只读、可粘贴、相对安全)包括日志尾随 | 当你需要分享调试报告时 |
openclaw status --deep | 运行网关健康检查(包括提供商探测;需要可达的网关) | 当"已配置"不意味着"工作时" |
openclaw gateway probe | 网关发现 + 可达性(本地 + 远程目标) | 当你怀疑探测的是错误的网关时 |
openclaw channels status --probe | 询问运行中的网关通道状态(并可选择探测) | 当网关可达但通道异常时 |
openclaw gateway status | 监督器状态(launchd/systemd/schtasks)、运行时 PID/退出、最后网关错误 | 当服务"看起来已加载"但没有运行时 |
openclaw logs --follow | 实时日志(运行时问题的最佳信号) | 当你需要实际失败原因时 |
分享输出:优先使用 openclaw status --all(它会编辑令牌)。如果你粘贴 openclaw status,考虑先设置 OPENCLAW_SHOW_SECRETS=0(令牌预览)。
常见问题
找不到提供商 "anthropic" 的 API 密钥
这意味着智能体的认证存储为空或缺少 Anthropic 凭据。认证是每个智能体的,因此新智能体不会继承主智能体的密钥。
修复选项:
- 重新运行 onboarding 并为该智能体选择 Anthropic。
- 或者在网关主机上粘贴设置令牌:bash
openclaw models auth setup-token --provider anthropic - 或者将
auth-profiles.json从主智能体目录复制到新智能体目录。
验证:
openclaw models statusOAuth 令牌刷新失败(Anthropic Claude 订阅)
这意味着存储的 Anthropic OAuth 令牌已过期,刷新失败。如果你使用的是 Claude 订阅(没有 API 密钥),最可靠的修复方法是切换到 Claude Code 设置令牌 并将其粘贴在网关主机上。
推荐(设置令牌):
# 在网关主机上运行(粘贴设置令牌)
openclaw models auth setup-token --provider anthropic
openclaw models status如果你在其他地方生成了令牌:
openclaw models auth paste-token --provider anthropic
openclaw models status控制 UI 在 HTTP 上失败("需要设备身份" / "连接失败")
如果你通过纯 HTTP 打开控制面板(例如 http://<lan-ip>:18789/ 或 http://<tailscale-ip>:18789/),浏览器处于非安全上下文,阻止 WebCrypto,因此无法生成设备身份。
修复:
- 优先使用通过 Tailscale Serve 的 HTTPS。
- 或者在本地打开网关主机:
http://127.0.0.1:18789/。 - 如果你必须停留在 HTTP,启用
gateway.controlUi.allowInsecureAuth: true并使用网关令牌(仅令牌;无设备身份/配对)。参阅控制 UI。
CI 密钥扫描失败
这意味着 detect-secrets 发现了基线中尚未的新候选者。遵循密钥扫描。
服务已安装但没有运行
如果网关服务已安装但进程立即退出,服务可能看起来"已加载"而实际没有运行。
检查:
openclaw gateway status
openclaw doctorDoctor/服务将显示运行时状态(PID/最后退出)和日志提示。
日志:
- 首选:
openclaw logs --follow - 文件日志(始终):
/tmp/openclaw/openclaw-YYYY-MM-DD.log(或你配置的logging.file) - macOS LaunchAgent(如果已安装):
$OPENCLAW_STATE_DIR/logs/gateway.log和gateway.err.log - Linux systemd(如果已安装):
journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager - Windows:
schtasks /Query /TN "OpenClaw Gateway (<profile>)" /V /FO LIST
启用更多日志:
- 提高文件日志详细度(持久化 JSONL):json
{ "logging": { "level": "debug" } } - 提高控制台详细度(仅 TTY 输出):json
{ "logging": { "consoleLevel": "debug", "consoleStyle": "pretty" } } - 快速提示:
--verbose仅影响控制台输出。文件日志仍由logging.level控制。
参阅/logging 了解格式、配置和访问的完整概述。
"网关启动受阻:设置 gateway.mode=local"
这意味着配置存在但 gateway.mode 未设置(或不是 local),因此网关拒绝启动。
修复(推荐):
- 运行向导并将网关运行模式设置为本地:bash
openclaw configure - 或者直接设置:bash
openclaw config set gateway.mode local
如果你本意是运行远程网关:
- 设置远程 URL 并保持
gateway.mode=remote:bashopenclaw config set gateway.mode remote openclaw config set gateway.remote.url "wss://gateway.example.com"
临时/开发-only: 传递 --allow-unconfigured 以在无 gateway.mode=local 的情况下启动网关。
还没有配置文件? 运行 openclaw setup 创建起始配置,然后重新运行网关。
服务环境(PATH + 运行时)
网关服务以最小 PATH 运行以避免 shell/管理器混乱:
- macOS:
/opt/homebrew/bin、/usr/local/bin、/usr/bin、/bin - Linux:
/usr/local/bin、/usr/bin、/bin
这有意排除版本管理器(nvm/fnm/volta/asdf)和包管理器(pnpm/npm),因为服务不会加载你的 shell 初始化。像 DISPLAY 这样的运行时变量应放在 ~/.openclaw/.env 中(由网关早期加载)。 Exec 在 host=gateway 上运行,将你的登录 shell PATH 合并到 exec 环境中,因此缺少的工具通常意味着你的 shell 初始化没有导出它们(或设置 tools.exec.pathPrepend)。参阅/tools/exec。
WhatsApp + Telegram 通道需要 Node;Bun 不支持。如果你的服务是使用 Bun 或版本管理的 Node 路径安装的,运行 openclaw doctor 迁移到系统 Node 安装。
沙箱中缺少技能 API 密钥
症状:技能在主机上工作但在沙箱中失败,提示缺少 API 密钥。
原因:沙箱化 exec 在 Docker 内部运行,不继承主机 process.env。
修复:
- 设置
agents.defaults.sandbox.docker.env(或每个智能体的agents.list[].sandbox.docker.env) - 或者将密钥烘焙到你的自定义沙箱镜像中
- 然后运行
openclaw sandbox recreate --agent <id>(或--all)
服务运行但端口未监听
如果服务报告运行但网关端口上没有监听内容,网关可能拒绝绑定。
这里"运行"的含义
Runtime: running意味着你的监督器(launchd/systemd/schtasks)认为进程是活的。RPC probe意味着 CLI 实际上可以连接到网关 WebSocket 并调用status。- 始终信任
Probe target:+Config (service):作为"我们实际尝试了什么"行。
检查:
gateway.mode必须是local才能使用openclaw gateway和服务。- 如果你设置
gateway.mode=remote,CLI 默认使用远程 URL。服务可能仍在本地运行,但你的 CLI 可能探测的是错误位置。使用openclaw gateway status查看服务的解析端口 + 探测目标(或传递--url)。 openclaw gateway status和openclaw doctor显示最后网关错误来自日志,当服务看起来运行但端口关闭时。- 非 loopback 绑定(
lan/tailnet/custom,或auto当 loopback 不可用时)需要认证:gateway.auth.token(或OPENCLAW_GATEWAY_TOKEN)。 gateway.remote.token仅用于远程 CLI 调用;它不启用本地认证。gateway.token被忽略;使用gateway.auth.token。
如果 openclaw gateway status 显示配置不匹配
Config (cli): ...和Config (service): ...通常应该匹配。- 如果不匹配,你几乎肯定是在编辑一个配置,而服务运行的是另一个。
- 修复:从你希望服务使用的相同
--profile/OPENCLAW_STATE_DIR重新运行openclaw gateway install --force。
如果 openclaw gateway status 报告服务配置问题
- 监督器配置(launchd/systemd/schtasks)缺少当前默认值。
- 修复:运行
openclaw doctor更新它(或openclaw gateway install --force进行完全重写)。
如果 Last gateway error: 提到"拒绝绑定 ... 没有认证"
- 你将
gateway.bind设置为非 loopback 模式(lan/tailnet/custom,或auto当 loopback 不可用时)但未配置认证。 - 修复:设置
gateway.auth.mode+gateway.auth.token(或导出OPENCLAW_GATEWAY_TOKEN)并重启服务。
如果 openclaw gateway status 说 bind=tailnet 但未找到 tailnet 接口
- 网关尝试绑定到 Tailscale IP(100.64.0.0/10),但主机上未检测到任何接口。
- 修复:在那台机器上启动 Tailscale(或将
gateway.bind改为loopback/lan)。
如果 Probe note: 说探测使用 loopback
- 这对于
bind=lan是预期的:网关监听0.0.0.0(所有接口),loopback 应该仍然可以在本地连接。 - 对于远程客户端,使用真实的 LAN IP(不是
0.0.0.0)加上端口,并确保已配置认证。
地址已使用(端口 18789)
这意味着某物已经在网关端口上监听。
检查:
openclaw gateway status它将显示监听器以及可能的原因(网关已运行、SSH 隧道)。如果需要,停止服务或选择不同的端口。
检测到额外的工作区文件夹
如果你从旧版本升级,磁盘上可能仍有 ~/openclaw。多个工作区目录可能导致混乱的认证或状态漂移,因为只有一个工作区是活动的。
修复: 保持单个活动工作区并归档/删除其余部分。参阅智能体工作区。
主聊天在沙箱工作区中运行
症状:pwd 或文件工具显示 ~/.openclaw/sandboxes/...,即使你期望主机工作区。
原因:agents.defaults.sandbox.mode: "non-main" 依据 session.mainKey(默认 "main")。群组/通道会话使用自己的密钥,因此被视为非主会话并获得沙箱工作区。
修复选项:
- 如果你希望智能体使用主机工作区:设置
agents.list[].sandbox.mode: "off"。 - 如果你希望在沙箱内访问主机工作区:为该智能体设置
workspaceAccess: "rw"。
"智能体被中止"
智能体在响应中途被中断。
原因:
- 用户发送了
stop、abort、esc、wait或exit - 超时已过
- 进程崩溃
修复: 只需发送另一条消息。会话继续。
"智能体回复失败:未知模型:anthropic/claude-haiku-3-5"
OpenClaw 故意拒绝较旧/不安全的模型(特别是那些更容易受到提示注入攻击的模型)。如果你看到此错误,模型名称不再受支持。
修复:
- 为提供商选择最新模型并更新你的配置或模型别名。
- 如果你不确定哪些模型可用,运行
openclaw models list或openclaw models scan并选择受支持的模型。 - 检查网关日志获取详细的失败原因。
另请参阅:Models CLI 和模型提供商。
消息未触发
检查 1: 发送者是否在允许列表中?
openclaw status在输出中查找 AllowFrom: ...。
检查 2: 对于群聊,是否需要提及?
# 消息必须匹配 mentionPatterns 或显式提及;默认值位于通道 groups/guilds 中。
# 多智能体:`agents.list[].groupChat.mentionPatterns` 覆盖全局模式。
grep -n "agents\|groupChat\|mentionPatterns\|channels\.whatsapp\.groups\|channels\.telegram\.groups\|channels\.imessage\.groups\|channels\.discord\.guilds" \
"${OPENCLAW_CONFIG_PATH:-$HOME/.openclaw/openclaw.json}"检查 3: 检查日志
openclaw logs --follow
# 或者如果你想要快速过滤:
tail -f "$(ls -t /tmp/openclaw/openclaw-*.log | head -1)" | grep "blocked\|skip\|unauthorized"配对码未到达
如果 dmPolicy 是 pairing,未知发送者应该收到一个代码,他们的消息被忽略直到批准。
检查 1: 是否有待处理请求正在等待?
openclaw pairing list <channel>待处理的 DM 配对请求默认为每个通道最多 3 个。如果列表已满,新请求不会生成代码,直到一个被批准或过期。
检查 2: 请求是否已创建但未发送回复?
openclaw logs --follow | grep "pairing request"检查 3: 确认该通道的 dmPolicy 不是 open/allowlist。
图片 + 提及不工作
已知问题:当你发送仅带有提及(没有其他文本)的图片时,WhatsApp 有时不会包含提及元数据。
变通方法: 添加一些文本与提及一起:
- ❌
@clawd+ 图片 - ✅
@clawd check this+ 图片
会话未恢复
检查 1: 会话文件是否存在?
ls -la ~/.openclaw/agents/<agentId>/sessions/检查 2: 重置窗口是否太短?
{
"session": {
"reset": {
"mode": "daily",
"atHour": 4,
"idleMinutes": 10080 // 7 天
}
}
}检查 3: 是否有人发送了 /new、/reset 或重置触发器?
智能体超时
默认超时是 30 分钟。对于长时间任务:
{
"reply": {
"timeoutSeconds": 3600 // 1 小时
}
}或者使用 process 工具在后台运行长时间命令。
WhatsApp 断开连接
# 检查本地状态(凭据、会话、排队的事件)
openclaw status
# 探测运行中的网关 + 通道(WA 连接 + Telegram + Discord API)
openclaw status --deep
# 查看最近的连接事件
openclaw logs --limit 200 | grep "connection\|disconnect\|logout"修复: 通常一旦网关运行就会自动重新连接。如果你卡住了,重启网关进程(无论你如何监督它),或用详细输出手动运行:
openclaw gateway --verbose如果你已注销/取消链接:
openclaw channels logout
trash "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/credentials" # 如果 logout 无法干净地删除所有内容
openclaw channels login --verbose # 重新扫描 QR媒体发送失败
检查 1: 文件路径是否有效?
ls -la /path/to/your/image.jpg检查 2: 是否太大?
- 图片:最大 6MB
- 音频/视频:最大 16MB
- 文档:最大 100MB
检查 3: 检查媒体日志
grep "media\|fetch\|download" "$(ls -t /tmp/openclaw/openclaw-*.log | head -1)" | tail -20高内存使用
OpenClaw 在内存中保留对话历史。
修复: 定期重启或设置会话限制:
{
"session": {
"historyLimit": 100 // 保留的最大消息数
}
}常见故障排除
"网关无法启动 — 配置无效"
OpenClaw 现在在配置包含未知键、格式错误值或无效类型时拒绝启动。这是故意的安全措施。
用 Doctor 修复:
openclaw doctor
openclaw doctor --fix注意:
openclaw doctor报告每个无效条目。openclaw doctor --fix应用迁移/修复并重写配置。- 诊断命令如
openclaw logs、openclaw health、openclaw status、openclaw gateway status和openclaw gateway probe即使在配置无效时也能运行。
"所有模型失败" — 我应该先检查什么?
- 凭据:针对被尝试的提供商是否存在(认证配置文件 + 环境变量)。
- 模型路由:确认
agents.defaults.model.primary和故障转移是你可以访问的模型。 - 网关日志:在
/tmp/openclaw/…中查找确切的提供商错误。 - 模型状态:使用
/model status(聊天)或openclaw models status(CLI)。
我在个人 WhatsApp 号码上运行 — 为什么自聊天很奇怪?
启用自聊天模式并将你的号码加入白名单:
{
channels: {
whatsapp: {
selfChatMode: true,
dmPolicy: "allowlist",
allowFrom: ["+15555550123"]
}
}
}参阅 WhatsApp 设置。
WhatsApp 将我注销。我如何重新认证?
再次运行登录命令并扫描 QR 码:
openclaw channels loginmain 上的构建错误 — 标准修复路径是什么?
git pull origin main && pnpm installopenclaw doctor- 检查 GitHub 问题或 Discord
- 临时解决方法:签出旧提交
npm install 失败(allow-build-scripts 或缺少 tar 或 yargs)。现在怎么办?
如果你从源码运行,使用仓库的包管理器:pnpm(首选)。仓库声明了 packageManager: "pnpm@…"。
典型恢复:
git status # 确保你在仓库根目录
pnpm install
pnpm build
openclaw doctor
openclaw gateway restart为什么:pnpm 是此仓库配置的包管理器。
如何在 git 安装和 npm 安装之间切换?
使用网站安装程序并选择带标志的安装方法。它就地升级并重写网关服务以指向新的安装。
切换到 git 安装:
curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git --no-onboard切换到 npm 全局安装:
curl -fsSL https://molt.bot/install.sh | bash注意:
- git 流程仅在仓库干净时才 rebase。首先提交或 stash 更改。
- 切换后,运行:bash
openclaw doctor openclaw gateway restart
Telegram 块流式传输未在工具调用之间分割文本。为什么?
块流式传输仅发送完成的文本块。你看到单条消息的常见原因:
agents.defaults.blockStreamingDefault仍然是"off"。channels.telegram.blockStreaming设置为false。channels.telegram.streamMode是partial或block并且草稿流式传输处于活动状态 (私聊 + 主题)。草稿流式传输在这种情况下禁用块流式传输。- 你的
minChars/ 合并设置太高,因此块被合并。 - 模型发出一个大的文本块(没有中间回复刷新点)。
修复清单:
- 将块流式传输设置放在
agents.defaults下,而不是根目录。 - 如果你想要真正的多消息块回复,设置
channels.telegram.streamMode: "off"。 - 调试时使用更小的块/合并阈值。
参阅[流式传输](/concepts/streamin
g)。
Discord 即使设置了 requireMention: false 也不在我的服务器中回复。
requireMention 仅在通道通过白名单后控制提及限制。默认情况下 channels.discord.groupPolicy 是白名单,因此公会必须显式启用。如果你设置 channels.discord.guilds.<guildId>.channels,只有列出的通道被允许;省略它以允许公会中的所有通道。
修复清单:
- 设置
channels.discord.groupPolicy: "open"或者添加公会白名单条目(可选择添加通道白名单)。 - 在
channels.discord.guilds.<guildId>.channels中使用数字通道 ID。 - 将
requireMention: false放在channels.discord.guilds下(全局或每个通道)。 顶级channels.discord.requireMention不是支持的键。 - 确保机器人有消息内容意图和通道权限。
- 运行
openclaw channels status --probe获取审核提示。
Cloud Code Assist API 错误:无效工具架构 (400)。现在怎么办?
这几乎总是工具架构兼容性问题。Cloud Code Assist 端点接受 JSON Schema 的严格子集。OpenClaw 在当前 main 中清理/规范化工具架构,但修复尚未包含在最后一个发布版中(截至 2026 年 1 月 13 日)。
修复清单:
- 更新 OpenClaw:
- 如果你可以从源码运行,拉取
main并重启网关。 - 否则,等待包含架构清理器的下一个发布版。
- 如果你可以从源码运行,拉取
- 避免不支持的关键字如
anyOf/oneOf/allOf、patternProperties、additionalProperties、minLength、maxLength、format等。 - 如果你定义自定义工具,保持顶级架构为
type: "object"与properties和简单枚举。
参阅工具和 TypeBox 架构。
macOS 特定问题
应用在授予权限(语音/麦克风)时崩溃
如果你在隐私提示上点击"允许"时应用消失或显示"中止陷阱 6":
修复 1:重置 TCC 缓存
tccutil reset All bot.molt.mac.debug修复 2:强制新 Bundle ID 如果重置不起作用,在scripts/package-mac-app.sh中更改 BUNDLE_ID(例如添加 .test 后缀)并重新构建。这会强制 macOS 将其视为新应用。
网关卡在"启动中..."
应用连接到本地网关端口 18789。如果它卡住:
修复 1:停止监督器(首选) 如果网关由 launchd 监督,杀死 PID 只会重新生成它。先停止监督器:
openclaw gateway status
openclaw gateway stop
# 或:launchctl bootout gui/$UID/bot.molt.gateway(替换为 bot.molt.<profile>;旧的 com.openclaw.* 仍然有效)修复 2:端口繁忙(查找监听器)
lsof -nP -iTCP:18789 -sTCP:LISTEN如果是无人监督的进程,先尝试正常停止,然后升级:
kill -TERM <PID>
sleep 1
kill -9 <PID> # 最后手段修复 3:检查 CLI 安装 确保全局 openclaw CLI 已安装并与应用版本匹配:
openclaw --version
npm install -g openclaw@<version>调试模式
获取详细日志:
# 在配置中打开跟踪日志:
# ${OPENCLAW_CONFIG_PATH:-$HOME/.openclaw/openclaw.json} -> { logging: { level: "trace" } }
#
# 然后运行详细命令以将调试输出镜像到 stdout:
openclaw gateway --verbose
openclaw channels login --verbose日志位置
| 日志 | 位置 |
|---|---|
| 网关文件日志(结构化) | /tmp/openclaw/openclaw-YYYY-MM-DD.log(或 logging.file) |
| 网关服务日志(监督器) | macOS:$OPENCLAW_STATE_DIR/logs/gateway.log + gateway.err.log(默认:~/.openclaw/logs/...;配置文件使用 ~/.openclaw-<profile>/logs/...)Linux: journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pagerWindows: schtasks /Query /TN "OpenClaw Gateway (<profile>)" /V /FO LIST |
| 会话文件 | $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/ |
| 媒体缓存 | $OPENCLAW_STATE_DIR/media/ |
| 凭据 | $OPENCLAW_STATE_DIR/credentials/ |
健康检查
# 监督器 + 探测目标 + 配置路径
openclaw gateway status
# 包括系统级扫描(旧/额外服务、端口监听器)
openclaw gateway status --deep
# 网关可达吗?
openclaw health --json
# 如果失败,使用连接详情重新运行:
openclaw health --verbose
# 默认端口上有东西在监听吗?
lsof -nP -iTCP:18789 -sTCP:LISTEN
# 最近活动(RPC 日志尾随)
openclaw logs --follow
# 如果 RPC 失败,回退
tail -20 /tmp/openclaw/openclaw-*.log重置所有内容
核选项:
openclaw gateway stop
# 如果你安装了服务并想要干净安装:
# openclaw gateway uninstall
trash "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}"
openclaw channels login # 重新配对 WhatsApp
openclaw gateway restart # 或:openclaw gateway⚠️ 这会丢失所有会话并需要重新配对 WhatsApp。
获取帮助
- 首先检查日志:
/tmp/openclaw/(默认:openclaw-YYYY-MM-DD.log,或你配置的logging.file) - 在 GitHub 上搜索现有问题
- 新建一个问题,包含:
- OpenClaw 版本
- 相关日志片段
- 重现步骤
- 你的配置(编辑机密!)
"你试过关机再开机了吗?" — 每个 IT 人员
🦞🔧
浏览器未启动(Linux)
如果你看到 "Failed to start Chrome CDP on port 18800":
最可能的原因: Ubuntu 上的 Snap 打包 Chromium。
快速修复: 安装 Google Chrome 代替:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb然后在配置中设置:
{
"browser": {
"executablePath": "/usr/bin/google-chrome-stable"
}
}完整指南: 参阅 browser-linux-troubleshooting