问题背景
最近在 Ubuntu 24.04 系统上升级 OpenClaw 至新版本(如 2026.3.2)时,运行安装脚本或启动仪表盘遇到了阻碍。控制台抛出的错误信息非常明确:Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service。
简单来说,程序试图检查用户级 systemd 服务是否启用时失败了。这在旧版本中通常能自动兼容,但在新版逻辑下,如果检查失败就会直接中止流程。即便尝试过 loginctl enable-linger 或在纯净环境中重装,该问题依然存在。
原因分析
这主要是 Ubuntu 24.04 及某些 Linux 发行版的机制导致的。在非登录会话(non-login session)或特定自动化环境下,默认可能没有正确初始化用户级的 systemd 环境(User Slice)。结果就是 systemctl --user 无法连接到正确的 D-Bus 会话总线或找不到运行时目录,从而报出'unavailable'。
解决方案
要解决这个问题,核心思路是手动补全 systemd 所需的环境变量和服务定义,让安装脚本能通过检查。我们可以按以下步骤操作。
1. 补全环境变量
systemctl --user 依赖两个关键环境变量来定位用户实例的套接字。在某些非交互式 shell 中,这些变量往往缺失。我们需要显式指定它们:
export XDG_RUNTIME_DIR=/run/user/1000
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
这一步相当于告诉 systemd 客户端去哪里发送命令,确保它能找到用户服务管理器。
2. 创建占位服务文件
OpenClaw 的安装脚本可能在运行状态检查前,隐式期望服务文件已存在于用户配置目录。如果文件不存在,某些 systemd 封装逻辑会直接报错。我们可以手动创建一个'占位符'服务文件:
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/openclaw-gateway.service <<'EOF'
[Unit]
Description=OpenClaw Gateway (bootstrap placeholder)
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
[Install]
WantedBy=default.target
EOF
这个服务执行 /bin/true 且标记为 RemainAfterExit=yes,意味着它一旦运行就被视为'活跃'状态。这样做是为了满足文件存在性检查,让后续的 is-enabled 调用返回成功。
3. 重载配置并启用服务
接下来正式在 systemd 数据库中注册这个服务:
systemctl --user daemon-reload
systemctl --user enable --now openclaw-gateway.service
systemctl --user is-enabled openclaw-gateway.service
此时再次确认状态,应该能看到服务已成功启用。这步操作确保了当后续安装命令再次调用检查时,systemd 能顺利找到该服务并通过验证。
4. 执行正式安装
环境准备好后,就可以运行官方安装命令了:
openclaw gateway install
systemctl --user daemon-reload
systemctl --user restart openclaw-gateway.service
安装程序通常会覆盖刚才创建的占位符文件,将其替换为真正的网关服务配置。最后的重启操作确保运行的是真实的 OpenClaw 网关,而不是那个只返回 true 的占位符。

