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 warningTelegram ETIMEDOUT/ENETUNREACHmemory 文件不存在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)
暂无评论