在 macOS 上运行 OpenClaw 的用户,或早或晚都会遇到这道坎:本地网关(Gateway)启动失败。症状各异——也许是终端里的 “Gateway service not loaded”,也许是打开控制面板一直显示 Disconnected,也许是之前好好的,升级后突然不工作了。

macOS 的 launchd 服务管理机制与 Linux systemd 有所不同,加上 OpenClaw 的 macOS App 与 CLI Gateway 之间存在生命周期耦合,导致 macOS 平台特有的一系列问题。本文系统梳理七大类故障的根因与修复方法,帮你快速定位并解决。更多资源请访问 OpenClaw 中文版官网

一、30 秒诊断:先跑这五条命令

无论遇到何种故障,先执行以下诊断序列,90% 的情况下可以直接定位问题:

# 第一步:全面健康检查(自动修复约 70% 的问题)
openclaw doctor

# 第二步:查看 Gateway 服务状态
openclaw gateway status

# 第三步:查看完整状态报告
openclaw status

# 第四步:实时监看日志,等待错误信息输出
openclaw logs --follow

# 第五步:检查 launchd 是否知道 Gateway 服务
launchctl list | grep openclaw

根据 openclaw doctor 的输出,每个条目会标注 OKWARNFAIL。加上 --fix 标志可以自动修复安全的问题:

openclaw doctor --fix

如果上述步骤没有解决问题,继续按以下故障分类逐一排查。

二、故障类型一:launchd 服务注销(最常见)

症状

$ openclaw gateway status
Gateway service not loaded. Start with: openclaw gateway install

$ launchctl list | grep openclaw
(无输出,或 PID 列为 -)

根因

这是 macOS 上最高频的 OpenClaw 问题,根本原因在于 openclaw gateway stop 命令内部调用 launchctl bootout——这个操作会完全注销服务注册,而不仅仅是停止进程。plist 文件仍然存在,但 launchd 已经不再知道这个服务了。

之后调用 openclaw gateway start 时,命令会检查服务是否已加载,发现没有加载就直接报错,形成死锁。

修复方案

# 唯一可靠的修复命令:重新安装并注册 LaunchAgent
openclaw gateway install

# 或强制重新安装(如有版本不匹配问题)
openclaw gateway install --force

# 验证修复结果
launchctl list | grep openclaw
# 应显示:带有 PID 的 ai.openclaw.gateway 条目

openclaw gateway status
# 应显示:Running

重要说明:在修复这类问题后,openclaw gateway restart 是可靠的重启方式,不要再使用 stop + start 的组合,因为后者会再次触发 bootout 问题。

launchd 崩溃循环导致的自动注销

还有一种变体:当 Gateway 在短时间内多次重启(例如连续执行多次 openclaw gateway restart,或连续修改配置触发多次 SIGUSR1),launchd 会将快速退出识别为”崩溃循环”并启动内置的限流保护,自动注销服务。

判断是否遇到这种情况:

log show --predicate 'process == "launchd"' --last 5m | grep openclaw
# 如果看到 "throttling" 或 "too many restarts" 相关消息,说明是这个问题

修复方式相同:openclaw gateway install --force,然后等待至少 1~2 分钟再进行下一次重启。

三、故障类型二:macOS App 误杀 Gateway 进程

症状

每次打开 OpenClaw macOS 菜单栏 App,所有活跃的聊天连接(Discord、Telegram 等)立即断开,过一会儿才重新连上。或者 App 打开后 Gateway 版本显示异常。

根因

这是一个影响多个版本的已知问题(GitHub #30123, #42530):macOS App 在启动时会向当前运行的 Gateway 进程发送 SIGTERM,杀掉它并重新启动一个新的 Gateway。这会导致所有活跃会话中断。

在 v2026.3.31+ 版本中,官方对此进行了修复:App 现在会识别当前运行的 openclaw-gateway 进程标题,不再杀掉健康运行的本地 Gateway 监听进程。

修复方案

方案一:升级到 v2026.3.31+(推荐,一劳永逸)

npm install -g openclaw@latest
openclaw --version   # 确认版本 ≥ 2026.3.31

方案二:绕过 App,直接使用浏览器控制面板(如无法立刻升级)

# 不使用 macOS App,直接在浏览器访问控制面板
open http://127.0.0.1:18789

# 结合 Tailscale 实现移动端访问,完全不依赖桌面 App

卸载 App 导致 LaunchAgent 丢失

相关问题:通过 Homebrew 安装的 macOS App(brew install --cask openclaw)在卸载时(brew uninstall --cask openclaw),会同时删除 ai.openclaw.gateway LaunchAgent,导致 CLI 方式运行的 Gateway 服务也失效。

# 卸载 App 后,立即重新注册 Gateway 服务
openclaw gateway install

# 如果 CLI 节点服务也丢失了
openclaw node install

四、故障类型三:gateway.mode 未设置

症状

$ openclaw gateway status
Gateway start blocked: set gateway.mode=local

根因

OpenClaw 出于安全考量,要求在配置文件中显式声明 Gateway 的运行模式。未声明时,Gateway 拒绝启动。这通常发生在首次安装未完成引导向导,或手动编辑配置文件时误删该字段的情况下。

修复方案

# 方式一:CLI 直接设置
openclaw config set gateway.mode local
openclaw gateway restart

# 方式二:检查并手动编辑配置文件
cat ~/.openclaw/openclaw.json | grep gateway

# 确认配置文件中包含:
# "gateway": {
#   "mode": "local",
#   ...
# }

# 如果没有,添加后重启
openclaw daemon restart

五、故障类型四:端口 18789 被占用

症状

$ openclaw logs --follow
[gateway] Error: listen EADDRINUSE: address already in use :::18789

# 或
$ openclaw gateway status
another gateway instance is already listening on port 18789

常见原因

  • 从旧版 Clawdbot/Moltbot 升级时,旧版守护进程(clawdbot-gatewaymoltbot-gateway)仍在运行
  • Gateway 崩溃后未完全退出,进程残留
  • 本地其他应用恰好使用了 18789 端口

修复方案

# 找到占用端口的进程
lsof -i :18789
# 示例输出:
# COMMAND   PID   USER   FD   TYPE ...
# clawdbot  1234  user   ...

# 终止占用进程
kill 1234
# 或强制终止
kill -9 1234

# 检查是否有旧版服务仍在运行
launchctl list | grep -E "clawdbot|moltbot|openclaw"
# 如果看到旧版标签,手动注销
launchctl bootout gui/$UID/com.clawdbot.gateway
launchctl bootout gui/$UID/ai.moltbot.gateway

# 重新启动 OpenClaw Gateway
openclaw gateway install

如果端口确实被其他应用长期占用,可以更换 Gateway 端口:

openclaw config set gateway.port 18790
openclaw gateway restart

# 同时更新控制面板访问地址为 http://127.0.0.1:18790

六、故障类型五:Node.js 版本不符

症状

Gateway 启动后立即退出,日志中没有明确的错误信息,或者出现语法错误。

$ openclaw gateway status
Runtime: stopped

$ openclaw logs --follow
SyntaxError: Unexpected token ...
# 或完全没有日志输出

根因

OpenClaw 要求 Node.js v22.16+ 或 v24(推荐)。如果系统中安装的 Node.js 版本过旧(如 v18、v20),Gateway 会在启动阶段静默失败,几乎不输出有用的错误信息。

修复方案

# 检查当前 Node.js 版本
node --version

# 如果版本过低,使用 nvm 切换到正确版本
# 安装 nvm(如未安装)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.zshrc

# 安装并切换到 Node.js v24
nvm install 24
nvm use 24
nvm alias default 24

# 验证
node --version   # 应显示 v24.x.x

# 重新安装 OpenClaw(确保使用正确 Node 版本的全局包)
npm install -g openclaw@latest

# 重新注册 Gateway 服务
openclaw gateway install

PATH 问题:nvm 切换后 launchd 仍用旧 Node

macOS launchd 服务不会继承 shell 的 PATH 和 nvm 环境变量。即使终端中 node --version 显示正确,launchd 启动的 Gateway 进程可能仍然使用的是旧版 Node。

# 检查 launchd 环境中 node 的位置
# 临时通过命令行直接启动测试
which node   # 记录这个路径

# 确保 openclaw gateway 使用的 node 路径是正确的
# 在 plist 文件中可能需要指定绝对路径
cat ~/Library/LaunchAgents/ai.openclaw.gateway.plist | grep Program

# 如果路径不对,重新安装
openclaw gateway install --force

七、故障类型六:Token 认证失效

症状

# 控制面板显示 Unauthorized 或要求输入 Token
# 或
$ openclaw logs --follow
AUTH_TOKEN_MISMATCH

常见触发场景

  • 安装时没有记录 Token,控制面板没有配置
  • 手动重新生成了 Token,但没有更新控制面板中的配置
  • v2026.3.7 升级后,同时配置了 token 和 password 但未设置 gateway.auth.mode(破坏性变更)

修复方案

# 查看当前 Token
openclaw config get gateway.auth.token

# 如果没有 Token,生成一个
openclaw doctor --generate-gateway-token

# 获取 Token 后,在浏览器控制面板(http://127.0.0.1:18789)
# 进入 Settings → Gateway,粘贴 Token 并点击 Connect

# 如果遇到 v2026.3.7 的破坏性变更(同时有 token 和 password)
openclaw config set gateway.auth.mode token   # 或 password
openclaw gateway restart

八、故障类型七:macOS 权限问题

症状

Gateway 运行正常,但 iMessage、文件访问、屏幕录制等功能无法使用,或者出现权限拒绝错误。

修复方案

macOS 的隐私与安全需要手动授权,OpenClaw 需要以下几项权限:

  1. 打开 系统设置 → 隐私与安全性
  2. 分别找到并开启以下权限,授予 OpenClawTerminal
    • 完全磁盘访问权限(Full Disk Access)——读写 iCloud 目录、邮件等
    • 辅助功能(Accessibility)——窗口控制和自动化
    • 屏幕录制(Screen Recording)——截图和屏幕分析
  3. 授权后建议重启 Gateway:openclaw gateway install --force

注意:每次通过 npm install -g openclaw@latest 大版本升级后,由于可执行文件路径可能变化,macOS 可能会重置这些权限,需要重新授权。如果升级后功能突然失效,先检查权限设置。

九、最新版本的重要修复(v2026.3.7 ~ v2026.3.31)

近几个版本针对 macOS Gateway 的稳定性做了多项改进,如果你遇到频繁的 Gateway 问题,升级到最新版通常是最省事的解决方案:

版本 macOS 相关修复
v2026.3.8 重启超时时 Gateway 以非零状态退出,让 launchd 能正确触发重启;配置重启守卫(防止错误配置导致进程崩溃);launchd 托管检测修复(XPC_SERVICE_NAME 识别,避免 launchd 下的自我 fork 循环)
v2026.3.31 macOS App 不再杀掉健康的本地 Gateway 监听进程(识别 openclaw-gateway 进程标题)
v2026.3.31 macOS 广域发现切换到 Tailscale MagicDNS,IP 变化后 Mac 客户端恢复更可靠
v2026.4.1 Gateway HTTP 单阶段失败不再导致全局 500;修复了 macOS 上 Exec 权限路径解析问题

十、macOS Gateway 最佳实践

防止睡眠杀死 Gateway

如果你在 Mac Mini 或 MacBook 上运行 24 小时在线的 OpenClaw,必须禁用系统睡眠:

# 防止系统睡眠(保持 Gateway 持续运行)
sudo pmset -a sleep 0 disksleep 0 displaysleep 0
sudo pmset -a hibernatemode 0 powernap 0
sudo pmset -a standby 0 autopoweroff 0
sudo pmset -a autorestart 1   # 断电后自动重启

正确的重启流程

# ✅ 正确方式:使用 restart(不会触发 bootout 问题)
openclaw gateway restart

# ❌ 避免:stop + start 组合
# openclaw gateway stop
# openclaw gateway start  # 这步可能因 bootout 而失败

# 如果 restart 也失败,唯一可靠的方式:
openclaw gateway install --force

验证 Gateway 健康状态的完整脚本

#!/bin/bash
echo "=== OpenClaw Gateway 健康检查 ==="

echo "\n[1] 版本信息"
openclaw --version

echo "\n[2] Node.js 版本(需要 v22.16+ 或 v24)"
node --version

echo "\n[3] launchd 服务状态"
launchctl list | grep openclaw

echo "\n[4] Gateway 状态"
openclaw gateway status

echo "\n[5] 端口占用情况"
lsof -i :18789

echo "\n[6] 配置检查"
openclaw config get gateway.mode
openclaw config get gateway.auth.mode 2>/dev/null || echo "(未设置 auth.mode)"

echo "\n[7] Doctor 诊断"
openclaw doctor

将上述内容保存为 check-gateway.sh,遇到问题时首先运行,快速定位故障位置。

十一、常见错误信息速查

错误信息 原因 解决命令
Gateway service not loaded launchd 服务已注销 openclaw gateway install
Gateway start blocked: set gateway.mode=local 配置文件缺少 mode 字段 openclaw config set gateway.mode local
EADDRINUSE :::18789 端口被占用 lsof -i :18789kill <PID>
AUTH_TOKEN_MISMATCH 客户端 Token 与服务端不一致 openclaw config get gateway.auth.token 后更新控制面板
refusing to bind gateway...without auth 非回环地址绑定但未设置 Token 设置 Token 或改回 loopback 绑定
Bootstrap failed: 5: Input/output error SIGUSR1 重启时 launchctl 失败 openclaw gateway install --force
控制面板一直 Disconnected Token 未配置或 Gateway 未运行 先查 openclaw gateway status,再检查 Token
频道连接掉线(打开 App 后) macOS App 杀掉 Gateway 进程 升级到 v2026.3.31+
Gateway 静默不响应 Node.js 版本过低 nvm use 24 后重装
Lock files exist: ~/.openclaw/*.lock 上次崩溃遗留锁文件 rm ~/.openclaw/*.lock

总结

macOS 上 OpenClaw Gateway 启动失败的根本原因通常落在以下几类之一:launchd 服务注销(gateway install 修复)、macOS App 生命周期干扰(升级 v2026.3.31+ 修复)、配置字段缺失(config set 修复)、端口冲突(查端口 + kill)、Node.js 版本不符(nvm use 24)。

遇到问题先跑 openclaw doctor --fix,再参考本文对应的故障类型做针对性修复——绝大多数情况下,这两步就够了。

想了解更多 OpenClaw 部署与运维技巧,欢迎访问 OpenClaw 中文版官网