boxmoe_header_banner_img

Hello! 欢迎来到柠檬柚稚 's Blogs

加载中

文章导读

OpenClaw 升级后启动失败排查:Bonjour/mDNS 插件导致 Gateway 反复崩溃


avatar
Li 2026年4月27日 8

OpenClaw 自动升级到 2026.4.24 后,Gateway 无法稳定启动。表面现象是 openclaw gateway status 显示未运行,连接 127.0.0.1:18789 失败,服务不断重启。

最终确认根因是新版内置的 bonjour 插件在当前服务器环境中触发 CIAO PROBING CANCELLED 未处理异常,导致 Gateway 进程退出。通过在配置中把 bonjour 加入 plugins.deny 禁用后恢复。

环境

  • OpenClaw 版本:2026.4.24
  • 安装方式:npm/pnpm global install
  • Gateway 端口:127.0.0.1:18789
  • 服务类型:systemd user service
  • 服务文件:/root/.config/systemd/user/openclaw-gateway.service

现象

升级后执行:

openclaw gateway status

显示 Gateway 未运行:

Runtime: stopped
Connectivity probe: failed
connect ECONNREFUSED 127.0.0.1:18789

执行:

openclaw gateway install

报错:

Gateway install failed: Error: systemctl enable failed:
Failed to enable unit: Unit file openclaw-gateway.service does not exist.

执行:

openclaw gateway start

报错:

Failed to restart openclaw-gateway.service:
Unit openclaw-gateway.service not found.

但实际检查发现 Gateway 服务文件存在:

ls -l /root/.config/systemd/user/openclaw-gateway.service
-rw-r--r-- 1 root root 1000 /root/.config/systemd/user/openclaw-gateway.service

这说明它不是系统级 systemd 服务,而是 root 用户下的 systemd user service

第一阶段问题:systemd user service 没有正确管理

直接执行:

systemctl --user status openclaw-gateway.service

报错:

Failed to connect to bus: No medium found

这是因为 root 用户的 user systemd 需要设置 XDG_RUNTIME_DIR

解决:

export XDG_RUNTIME_DIR=/run/user/0
systemctl --user daemon-reload
systemctl --user enable --now openclaw-gateway.service
systemctl --user status openclaw-gateway.service --no-pager

这一步后,服务可以被拉起,但很快又退出。

第二阶段问题:Gateway 启动后反复崩溃

查看日志:

grep -E "ready|bonjour|CIAO|Unhandled|ERROR|WARN" /tmp/openclaw/openclaw-2026-04-27.log | tail -120

关键日志如下:

[gateway] ready (7 plugins: acpx, bonjour, browser, device-pair, phone-control, talk-voice, telegram)

随后出现:

bonjour: watchdog detected non-announced service; attempting re-advertise
bonjour: restarting advertiser
[openclaw] Unhandled promise rejection: CIAO PROBING CANCELLED

然后 Gateway 退出,被 systemd 再次拉起,进入循环:

ready
bonjour stuck in probing
CIAO PROBING CANCELLED
process exits
systemd restarts

根因

OpenClaw 2026.4.24 启用了内置 bonjour 插件,用于通过 Bonjour/mDNS 广播本地 Gateway。

在当前服务器环境中,mDNS 广播无法正常完成,一直卡在 probing 状态。OpenClaw 尝试重启 advertiser 时,底层 ciao 库抛出:

CIAO PROBING CANCELLED

这个异常没有被插件正确吞掉,最终变成:

Unhandled promise rejection

导致 Gateway 进程退出。

所以根因不是:

  • Node punycode deprecation warning
  • Telegram ETIMEDOUT/ENETUNREACH
  • memory 文件不存在
  • systemd 服务文件不存在

真正根因是:

bonjour 插件在当前环境下触发 CIAO PROBING CANCELLED,导致 Gateway 崩溃

走过的坑

一开始尝试在配置中加入:

{
  "plugins": {
    "bonjour": {
      "enabled": false
    }
  }
}

这是错误写法。

OpenClaw 2026.4.24 会报:

plugins: Unrecognized key: "bonjour"

然后 Gateway 拒绝启动。

用下面命令可以修复错误配置,但不能解决 bonjour 崩溃问题:

openclaw doctor --fix

正确解决方法

正确方式是使用 plugins.deny 禁用插件。

先停止 Gateway:

export XDG_RUNTIME_DIR=/run/user/0
systemctl --user stop openclaw-gateway.service

修改配置:

node <<'NODE'
const fs = require("fs");
const p = "/root/.openclaw/openclaw.json";
const c = JSON.parse(fs.readFileSync(p, "utf8"));

c.plugins ||= {};
delete c.plugins.bonjour;

const deny = new Set(Array.isArray(c.plugins.deny) ? c.plugins.deny : []);
deny.add("bonjour");
c.plugins.deny = [...deny];

fs.writeFileSync(p, JSON.stringify(c, null, 2) + "\n");
NODE

验证配置:

openclaw doctor

重启 Gateway:

export XDG_RUNTIME_DIR=/run/user/0
systemctl --user daemon-reload
systemctl --user reset-failed openclaw-gateway.service
systemctl --user restart openclaw-gateway.service
sleep 20
systemctl --user status openclaw-gateway.service --no-pager

确认日志:

grep -E "ready|bonjour|CIAO|Unhandled|ERROR|WARN" /tmp/openclaw/openclaw-2026-04-27.log | tail -80

修复后应看到:

[gateway] ready (6 plugins: acpx, browser, device-pair, phone-control, talk-voice, telegram)

注意这里已经没有 bonjour

再确认插件状态:

openclaw plugins list | grep -i bonjour

输出:

Bonjour │ bonjour │ disabled

最终结果

Gateway 正常运行:

Active: active (running)

日志显示:

ready (6 plugins: acpx, browser, device-pair, phone-control, talk-voice, telegram)

Bonjour 已禁用:

Bonjour │ bonjour │ disabled

不再出现新的:

CIAO PROBING CANCELLED
Unhandled promise rejection

建议的长期配置

由于当前是 root 用户的 systemd user service,建议启用 linger,避免退出 SSH 或重启后 user service 不自动保持:

loginctl enable-linger root

验证:

loginctl show-user root | grep Linger

期望输出:

Linger=yes

以后管理 Gateway 用:

export XDG_RUNTIME_DIR=/run/user/0
systemctl --user status openclaw-gateway.service --no-pager
systemctl --user restart openclaw-gateway.service
journalctl --user -u openclaw-gateway.service -n 120 --no-pager

总结

这次问题由几个因素叠加造成:

  • OpenClaw 升级后启用了或保留了内置 bonjour 插件。
  • 当前服务器环境不适合运行 Bonjour/mDNS 广播,导致 ciao 库抛出 CIAO PROBING CANCELLED
  • OpenClaw Gateway 因未处理的 Promise rejection 退出。
  • openclaw gateway install/start 对 root user systemd 的检测不够准确,误报系统级 service 不存在。

最终解决方案是:

  • 使用 plugins.deny 禁用 bonjour
  • systemctl --user 管理 /root/.config/systemd/user/openclaw-gateway.service
  • 设置 XDG_RUNTIME_DIR=/run/user/0
  • 可选启用 loginctl enable-linger root 保证 user service 常驻。


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码