Ubuntu 安装 OpenClaw 遇到 Gateway 服务检查失败怎么办?
最近在新部署的 Linux 服务器上运行 openclaw gateway install 时,遇到了一个比较隐蔽的问题。系统环境是 Ubuntu 24.04 LTS,Node 版本 v22.22.0,OpenClaw 版本 2026.3.2。
现象与报错
在全新的服务器环境中,systemd user services 配置正常,但执行安装命令后直接失败。控制台输出的错误信息如下:
Gateway service check failed: Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service
看起来像是 systemctl 命令本身出了问题,但实际上并非如此。
为什么会出错?
深入分析代码逻辑后发现,问题出在 dist/systemd-*.js 文件中的 isSystemdServiceEnabled() 函数。它调用了 execFileUtf8("systemctl", ["--user", "is-enabled", "openclaw-gateway.service"])。
当服务尚未安装时,systemctl 会返回特定的状态:
- 退出码:4
- stdout:"not-found\n"
- stderr:空
但在 Node.js 的错误处理逻辑中,当非零退出码发生时,代码会用 error.message 替换空的 stderr。这导致原本应该被读取的 "not-found" 信息被覆盖,取而代之的是类似 "Command failed: ..." 的错误提示。
随后的 readSystemctlDetail() 函数优先判断 stderr 是否为真,因此获取到了错误消息而非 "not-found"。最终 isSystemdUnitNotEnabled() 无法识别该状态,导致脚本误判并抛出异常。
简单来说,就是程序把'服务没找到'当成了'命令执行失败',从而中断了安装流程。
临时解决方案
既然官方修复可能还需要时间,我们可以手动创建 systemd 用户服务文件来绕过这个检测步骤。操作步骤如下:
- 确保目录存在
- 写入服务配置文件
- 重载并启动服务
具体命令如下:
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/openclaw-gateway.service << EOF
[Unit]
Description=OpenClaw Gateway
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=$(which node) $(realpath $(which openclaw)) gateway run --port 18789
Restart=always
RestartSec=5
KillMode=process
WorkingDirectory=$HOME/.openclaw
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable openclaw-gateway.service
systemctl --user start openclaw-gateway.service
注意:上面的端口号
18789请根据实际配置需求调整。如果之前已经尝试过安装,建议先清理残留的服务配置再执行上述命令。

