Ubuntu安装OpenClaw报错Gateway service check failed解决方法

Bug: gateway install fails on fresh Linux servers — execFileUtf8 clobbers systemctl stdout

来源: GitHub Issue #32635

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-found\n"
  • 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 场景。


🎁 MiniMax 跨年福利来袭!邀好友享 Coding Plan 双重好礼,助力开发体验!好友立享 9折 专属优惠 + Builder 权益,你赢返利 + 社区特权!👉 立即参与

Read more

JavaScript包管理工具全面对比教程

JavaScript包管理工具全面对比教程

一、工具概览与发布时间 工具首次发布当前稳定版维护状态npm2010年1月10.x官方维护,持续更新Yarn2016年10月4.x官方维护,持续更新pnpm2017年9.x官方维护,活跃开发Bun2022年9月1.x官方维护,快速发展 发布时间线 :npm作为Node.js的默认包管理器,已存在超过14年;Yarn由Facebook推出,旨在解决早期npm的性能问题;pnpm通过硬链接和符号链接实现高效存储;Bun是新兴的全栈JavaScript运行时,内置包管理功能。 二、市场占有率与生态现状 2025年市场使用情况(基于公开数据估算) * npm :约60-70%(作为Node.js默认工具,基数庞大) * Yarn :约15-20%(在大型项目中仍有稳定使用) * pnpm :约10-15%(增长迅速,尤其在Monorepo场景) * Bun :约3-5%(新兴工具,社区关注度高) 生态支持 : * npm:所有主流框架(React、Vue、Angular等)都提供npm安装方式 * Yarn:与npm仓库兼容,多数包支持Yarn

By Ne0inhk
【Java】2025 年 Java 学习路线:从入门到精通

【Java】2025 年 Java 学习路线:从入门到精通

文章目录 * 一、Java基础阶段(4-8周) * 1. 开发环境搭建 * 2. 核心语法基础 * 3. 面向对象编程(OOP) * 4. 核心类库 (Java SE API) * 5. 关联技术基础 * 二、Java 进阶阶段(6-10周) * 1. JVM 深度理解 * 2. 并发编程 - 应对高并发挑战 * 3. Java新特性 - 拥抱现代化 * 4. 设计模式 * 三、数据库与MySQL(2-3周) * 1. 环境搭建 * 2. SQL核心与进阶 * 3. 数据库设计与性能优化 * 四、开发框架与中间件(8-12周) * 1. Spring 生态

By Ne0inhk

JDBC PostgreSQL 连接 URL 参数详解指南(适用于 Java 后端开发者)

以下是一份完整、系统、实用的 JDBC PostgreSQL 连接 URL 参数详解指南,专为 Java 后端开发者(如您)在银行保险系统开发场景中设计,涵盖参数分类、作用、推荐顺序、环境配置示例及综合参考示例,内容深度对标您此前对 MySQL 的学习需求,确保知识体系一致、实践可迁移。 ✅ JDBC PostgreSQL 连接 URL 参数详解指南(适用于 Java 后端开发者) 一、什么是 JDBC PostgreSQL 连接 URL? JDBC(Java Database Connectivity)是 Java 应用连接数据库的标准 API。PostgreSQL 的官方 JDBC 驱动(org.postgresql.

By Ne0inhk
双非 Java 后端首次实习 | 个人经验分享总结

双非 Java 后端首次实习 | 个人经验分享总结

摘要:实习期间参与企业后台项目开发,熟悉企业开发流程与代码规范。 实习核心流程(结合实际经历) 由于自己进入的是一个小公司实习,当时项目刚好启动,参与了较多基础模块的开发。 一、基础准备与环境搭建阶段(入职 1-3 天) 1. 公司基础配置:进入公司飞书、拥有个人邮箱等基础办公权限 2. 代码拉取与环境搭建: * 学习并使用 git/svn 等版本管理工具 clone 项目代码(公司使用的是阿里云云效) * 配置项目所需配置文件,搭建后端 + 前端开发环境(后端需兼顾前端环境) * 解决环境依赖问题,确保项目能正常跑起来(熟悉配置文件与环境) * 熟悉开发工具的使用,避免因操作问题浪费时间(mentor 教了debug技巧,快捷键) 二、项目熟悉阶段(入职 1-2 周) 这个阶段任务主要是熟悉环境,熟练使用通用封装 / 工具类,自己在熟悉项目的时候,寻找少量项目bug,提交问题给 mentor

By Ne0inhk