问题描述
https://github.com/qingchencloud/clawpanel/blob/main/docs/linux-deploy.md
文档中提到 “ClawPanel 现已自动检测非 root 用户并加 sudo” 试图解决 npm 全局安装的权限问题。但该逻辑与 Standalone(独立包)安装模式 存在严重冲突。
当用户初始使用 Standalone 独立包模式(运行于 ~/.openclaw-bin/)部署时,如果后续在 Web 后台点击升级/降级,面板会自动调用 sudo npm install -g 强刷。
这导致新版本被用 root 权限错误地写入了全局路径(如 ~/.npm-global/),而原本运行的 ~/.openclaw-bin/ 独立包文件未被覆盖,同时 systemd 服务文件内的路径和 OPENCLAW_SERVICE_VERSION 环境变量也未被同步重写。最终导致系统内存在两套脱节的 OpenClaw,升级无法生效。
复现步骤
当前运行:~/.openclaw-bin/ (Standalone 稳定版)
点击Web升级后:面板后台自动加 sudo 降级通过 npm 安装到了 ~/.npm-global/。
后果:两套目录并存,systemd 依然读取旧的 bin 目录,版本完全脱节。
期望行为
模式识别:后台升级脚本应当优先检测当前 systemd 服务实际指向的运行目录。如果原本是 Standalone 独立包模式,应该去拉取对应的 standalone-zh.tar.gz 压缩包并覆盖原 bin 目录,而不是无脑切换到 sudo npm install -g。
环境同步:如果升级过程中由于网络或策略原因,发生安装模式切换(如从 Standalone 变更为 npm 全局),脚本必须动态重写 systemd 服务文件中的 ExecStart 路径和版本号环境变量,不能各走各的路径。
操作系统
Ubuntu / Debian
系统版本
Ubuntu 24.04.4 LTS
ClawPanel 版本
0.17.0
截图或日志
回退到推荐稳定版 📦 尝试 standalone 独立安装包(汉化版专属,自带 Node.js 运行时,无需 npm) 查询最新版本...
CDN 下载失败(standalone 版本 2026.5.26-zh.1 与请求版本 2026.5.18-zh.1 不匹配),尝试从 GitHub Releases 下载...
📦 尝试 standalone 独立安装包(汉化版专属,自带 Node.js 运行时,无需 npm) 查询最新版本...
standalone 不可用(GitHub: standalone 版本 2026.5.26-zh.1 与请求版本 2026.5.18-zh.1 不匹配),降级到 npm 安装...
Git HTTPS 规则已就绪 (6/6)
安装完成 (@qingchencloud/openclaw-zh@2026.5.18-zh.1)
【核心铁证】:npm verbose 显示当前工作目录被强制指向了用户家目录
npm verbose cwd /home/用户名/.local/share/clawpanel
npm verbose os Linux 6.8.0-124-generic
npm verbose node v22.22.2
npm verbose exit 0
npm info ok
补充信息
服务器上发生冲突的实际路径对比(双版本分裂)
在执行完上述升级后,通过命令行排查服务器,发现系统内部生成了两套完全独立的、没有互通的文件:
路径 A (原本实际运行的 Standalone 目录):~/.openclaw-bin/ (版本依然停留在 2026.5.28-zh.1)
路径 B (Web 端升级后自动创建的 npm 目录):~/.npm-global/ (新版本 2026.5.18-zh.1 被装在了这里)
[Service]
问题 1:即使网页端用 npm 方式升级成功,ExecStart 依然固执地指向旧的 bin 路径
ExecStart=/home/用户名/.openclaw-bin/openclaw
问题 2:环境变量里的版本号死活不会更新,导致面板识别紊乱
Environment=OPENCLAW_SERVICE_VERSION=2026.4.9
问题 3:环境路径中并未包含新写入的 npm-global 路径
Environment=PATH=/usr/local/bin:/usr/bin:/bin
问题描述
https://github.com/qingchencloud/clawpanel/blob/main/docs/linux-deploy.md
文档中提到 “ClawPanel 现已自动检测非 root 用户并加 sudo” 试图解决 npm 全局安装的权限问题。但该逻辑与 Standalone(独立包)安装模式 存在严重冲突。
当用户初始使用 Standalone 独立包模式(运行于 ~/.openclaw-bin/)部署时,如果后续在 Web 后台点击升级/降级,面板会自动调用 sudo npm install -g 强刷。
这导致新版本被用 root 权限错误地写入了全局路径(如 ~/.npm-global/),而原本运行的 ~/.openclaw-bin/ 独立包文件未被覆盖,同时 systemd 服务文件内的路径和 OPENCLAW_SERVICE_VERSION 环境变量也未被同步重写。最终导致系统内存在两套脱节的 OpenClaw,升级无法生效。
复现步骤
当前运行:~/.openclaw-bin/ (Standalone 稳定版)
点击Web升级后:面板后台自动加 sudo 降级通过 npm 安装到了 ~/.npm-global/。
后果:两套目录并存,systemd 依然读取旧的 bin 目录,版本完全脱节。
期望行为
模式识别:后台升级脚本应当优先检测当前 systemd 服务实际指向的运行目录。如果原本是 Standalone 独立包模式,应该去拉取对应的 standalone-zh.tar.gz 压缩包并覆盖原 bin 目录,而不是无脑切换到 sudo npm install -g。
环境同步:如果升级过程中由于网络或策略原因,发生安装模式切换(如从 Standalone 变更为 npm 全局),脚本必须动态重写 systemd 服务文件中的 ExecStart 路径和版本号环境变量,不能各走各的路径。
操作系统
Ubuntu / Debian
系统版本
Ubuntu 24.04.4 LTS
ClawPanel 版本
0.17.0
截图或日志
回退到推荐稳定版 📦 尝试 standalone 独立安装包(汉化版专属,自带 Node.js 运行时,无需 npm) 查询最新版本...
CDN 下载失败(standalone 版本 2026.5.26-zh.1 与请求版本 2026.5.18-zh.1 不匹配),尝试从 GitHub Releases 下载...
📦 尝试 standalone 独立安装包(汉化版专属,自带 Node.js 运行时,无需 npm) 查询最新版本...
standalone 不可用(GitHub: standalone 版本 2026.5.26-zh.1 与请求版本 2026.5.18-zh.1 不匹配),降级到 npm 安装...
Git HTTPS 规则已就绪 (6/6)
安装完成 (@qingchencloud/openclaw-zh@2026.5.18-zh.1)
【核心铁证】:npm verbose 显示当前工作目录被强制指向了用户家目录
npm verbose cwd /home/用户名/.local/share/clawpanel
npm verbose os Linux 6.8.0-124-generic
npm verbose node v22.22.2
npm verbose exit 0
npm info ok
补充信息
服务器上发生冲突的实际路径对比(双版本分裂)
在执行完上述升级后,通过命令行排查服务器,发现系统内部生成了两套完全独立的、没有互通的文件:
路径 A (原本实际运行的 Standalone 目录):~/.openclaw-bin/ (版本依然停留在 2026.5.28-zh.1)
路径 B (Web 端升级后自动创建的 npm 目录):~/.npm-global/ (新版本 2026.5.18-zh.1 被装在了这里)
[Service]
问题 1:即使网页端用 npm 方式升级成功,ExecStart 依然固执地指向旧的 bin 路径
ExecStart=/home/用户名/.openclaw-bin/openclaw
问题 2:环境变量里的版本号死活不会更新,导致面板识别紊乱
Environment=OPENCLAW_SERVICE_VERSION=2026.4.9
问题 3:环境路径中并未包含新写入的 npm-global 路径
Environment=PATH=/usr/local/bin:/usr/bin:/bin