Ubuntu安装OpenClaw报错Gateway service check failed的原因及解决方法

作者:

文章目录
  • OpenClaw 版本: 2026.3.2操作系统: Ubuntu 24.04 LTSNode: v22.22.0
  • 在全新的 Linux 服务器(Ubuntu 22.04/24.04)上,openclaw gateway install 命令失败。这些服务器上 systemd user services 已正确配置,但 openclaw-gateway service 尚未安装。
  • Gateway service check failed: Error: systemctl is-enabled unavailable: Command failed: systemctl –user is-enabled openclaw-gateway.service
  • 在 dist/systemd-*.js 文件中,isSystemdServiceEnabled() 函数调用 execFileUtf8("systemctl", ["–user", "is-enabled", "openclaw-gateway.service"])。 当服务不存在时,systemctl 返回: 退出码: 4 stdout: "not-foundn" stderr: "" (空) execFileUtf8 函数处理非零退出码时,会用 error.message 替换空的 stderr: const stderrText = String(stderr ?? “”); resolve({ stdout: String(stdout ?? “”), stderr: stderrText || (typeof e.message === “string” ? e.message : …), code: typeof e.code === “number” ? e.code : 1 }); 这导致: stdout: "not-found" stderr: "Command failed: systemctl –user is-enabled openclaw-gateway.service" (被覆盖) 然后 readSystemctlDetail() 优先选择 stderr(truthy)而非 stdout: function readSystemctlDetail(result) { return (result.stderr || result.stdout || “”).trim(); } 所以 detail = "Command failed: systemctl –user is-enabled openclaw-gateway.service" — 而不是 "not-found"。 isSystemdUnitNotEnabled(detail) 检查 "not-found",但 detail 字符串是错误消息,所以返回 false。代码继续执行并抛出异常。
  • 全新 Ubuntu 服务器,已启用 systemd user services 通过 npm 全局安装 openclaw 运行 openclaw gateway install –port 18789 –force 观察错误
  • gateway install 应识别退出码 4 / "not-found" 为 "服务尚未安装",并继续创建服务文件。
  • 三选一: execFileUtf8: 不再用 error.message 替换空的 stderr(或分开存储两者) readSystemctlDetail: 当 stderr 包含 "Command failed" 时,优先使用 stdout isSystemdServiceEnabled: 也直接检查 stdout 中的 unit-not-found 模式
  • 在调用 openclaw gateway start 前手动创建 systemd user service 文件: 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
  • v2026.3.2 更新日志提到修复了 "container systemd checks"(#26089),但那仅覆盖 ENOENT/EACCES 情况 — 不包括这个 systemd 可用但单元尚不存在的退出码 4 场景。
  • 报错类型 核心原因 快速修复步骤(直接复制执行) 1. Error code 1008(网关断开)+ 4008 端口问题 1008:缺少 gateway token 导致未授权;4008:端口配置冲突(默认网关端口 18789) bash # 生成新的gateway token openclaw doctor –generate-gateway-token # 重启网关服务 systemctl –user restart openclaw-gateway # 打开带token的控制面板 openclaw dashboard 2. Error code 401(授权失败) 1. 模型服务商账户余额不足;2. 部分模型(如 minmax)兼容性问题 1. 充值对应模型服务商账户(如 OpenAI/SiliconFlow);2. 切换兼容模型(如 DeepSeek-V3.2) 3. command not found(命令不存在) Windows 环境缺少 WSL/Node.js 依赖,安装顺序错误 “`bash # 升级系统依赖 apk update && apk add curl bash # 安装 nvm(Node.js 版本管理工具) curl -o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh 4. Error code 128(Git 拉取失败) Git 协议配置问题,无法通过 SSH 拉取开源依赖 bash # 全局配置Git用HTTPS替代SSH协议 git config –global url."https://github.com/".insteadOf ssh://git@github.com/ git config –global url."https://github.com/".insteadOf git@github.com: 5. 模型配置不成功 openclaw.json 配置文件缺少模型信息或格式错误 1. 手动配置:进入用户目录→找到「.openclaw/openclaw.json」→按以下格式添加模型: json "mode":"merge", "providers":{ "siliconflow":{ "baseUrl": "https://api.siliconflow.cn/v1", "apikey": "你的API Key", "api": "openai-compliant", "models":[{ "id": "deepseek-ai/DeepSeek-V3.2", "name": "DeepSeek-V3.2", "contextWindow": 200000, "maxTokens": 8192 }] } } 2. 简化方式:执行 openclaw config 进入交互式配置 到此这篇关于Ubuntu安装OpenClaw报错Gateway service check failed的原因及解决方法的文章就介绍到这了,更多相关OpenClaw安装报错Gateway service check failed内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!
  • 目录
    • Bug: gateway install fails on fresh Linux servers — execFileUtf8 clobbers systemctl stdout
    • 问题描述
    • 错误信息
    • 根本原因
    • 复现步骤
    • 期望行为
    • 建议修复
    • 临时解决方案
    • 备注
    • 附:OpenClaw部署常见报错修复指南

    OpenClaw 版本: 2026.3.2
    操作系统: Ubuntu 24.04 LTS
    Node: v22.22.0

    在全新的 Linux 服务器(Ubuntu 22.04/24.04)上,openclaw gateway install 命令失败。这些服务器上 systemd user services 已正确配置,但 openclaw-gateway service 尚未安装。

    Gateway service check failed: Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service

    dist/systemd-*.js 文件中,isSystemdServiceEnabled() 函数调用 execFileUtf8("systemctl", ["--user", "is-enabled", "openclaw-gateway.service"])

    当服务不存在时,systemctl 返回:

    • 退出码: 4
    • stdout: "not-foundn"
    • stderr: "" (空)

    execFileUtf8 函数处理非零退出码时,会用 error.message 替换空的 stderr:

    const stderrText = String(stderr ?? "");
    resolve({
      stdout: String(stdout ?? ""),
      stderr: stderrText || (typeof e.message === "string" ? e.message : ...),
      code: typeof e.code === "number" ? e.code : 1
    });

    这导致:

    • stdout: "not-found"
    • stderr: "Command failed: systemctl –user is-enabled openclaw-gateway.service" (被覆盖)

    然后 readSystemctlDetail() 优先选择 stderr(truthy)而非 stdout:

    function readSystemctlDetail(result) {
      return (result.stderr || result.stdout || "").trim();
    }

    所以 detail = "Command failed: systemctl –user is-enabled openclaw-gateway.service" — 而不是 "not-found"。

    isSystemdUnitNotEnabled(detail) 检查 "not-found",但 detail 字符串是错误消息,所以返回 false。代码继续执行并抛出异常。

    1. 全新 Ubuntu 服务器,已启用 systemd user services
    2. 通过 npm 全局安装 openclaw
    3. 运行 openclaw gateway install --port 18789 --force
    4. 观察错误

    gateway install 应识别退出码 4 / "not-found" 为 "服务尚未安装",并继续创建服务文件。

    三选一:

    1. execFileUtf8: 不再用 error.message 替换空的 stderr(或分开存储两者)
    2. readSystemctlDetail: 当 stderr 包含 "Command failed" 时,优先使用 stdout
    3. isSystemdServiceEnabled: 也直接检查 stdout 中的 unit-not-found 模式

    在调用 openclaw gateway start 前手动创建 systemd user service 文件:

    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
    

    v2026.3.2 更新日志提到修复了 "container systemd checks"(#26089),但那仅覆盖 ENOENT/EACCES 情况 — 不包括这个 systemd 可用但单元尚不存在的退出码 4 场景。

    报错类型

    核心原因

    快速修复步骤(直接复制执行)

    1. Error code 1008(网关断开)+ 4008 端口问题

    1008:缺少 gateway token 导致未授权;4008:端口配置冲突(默认网关端口 18789)

    bash # 生成新的gateway token openclaw doctor –generate-gateway-token # 重启网关服务 systemctl –user restart openclaw-gateway # 打开带token的控制面板 openclaw dashboard

    2. Error code 401(授权失败)

    1. 模型服务商账户余额不足;2. 部分模型(如 minmax)兼容性问题

    1. 充值对应模型服务商账户(如 OpenAI/SiliconFlow);2. 切换兼容模型(如 DeepSeek-V3.2)

    3. command not found(命令不存在)

    Windows 环境缺少 WSL/Node.js 依赖,安装顺序错误

    “`bash # 升级系统依赖 apk update && apk add curl bash # 安装 nvm(Node.js 版本管理工具) curl -o-
    https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh

    4. Error code 128(Git 拉取失败)

    Git 协议配置问题,无法通过 SSH 拉取开源依赖

    bash # 全局配置Git用HTTPS替代SSH协议 git config –global url."https://github.com/".insteadOf ssh://git@github.com/ git config –global url."https://github.com/".insteadOf git@github.com:

    5. 模型配置不成功

    openclaw.json 配置文件缺少模型信息或格式错误

    1. 手动配置:进入用户目录→找到「.openclaw/openclaw.json」→按以下格式添加模型: json "mode":"merge", "providers":{ "siliconflow":{ "baseUrl": "
    https://api.siliconflow.cn/v1", "apikey": "你的API Key", "api": "openai-compliant", "models":[{ "id": "deepseek-ai/DeepSeek-V3.2", "name": "DeepSeek-V3.2", "contextWindow": 200000, "maxTokens": 8192 }] } } 2. 简化方式:执行 openclaw config 进入交互式配置

    到此这篇关于Ubuntu安装OpenClaw报错Gateway service check failed的原因及解决方法的文章就介绍到这了,更多相关OpenClaw安装报错Gateway service check failed内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!

    站内搜索