🔍 为什么会报错?
核心原因在于 环境隔离。NVM(Node Version Manager)是通过修改 PATH 环境变量来工作的,这些变量仅在你的 交互式 Shell(如 Bash/Zsh) 中生效。
而 Systemd 是一个独立的系统守护进程,它启动时:
- 找不到配置文件:默认不会去 NVM 路径下搜索
.service文件。 - 找不到命令:Systemd 的运行环境非常纯净,它不知道
node或openclaw被安装在 NVM 的深层目录里。
🛠️ 解决方案:三步手动修复
通过手动创建服务文件并硬编码(Hardcode) NVM 路径,可以完美解决路径丢失问题。
第一步:创建 Systemd 用户目录
首先确保用户级的服务目录存在:
mkdir -p ~/.config/systemd/user/
第二步:写入服务配置
直接复制并运行以下整段命令。
注意:下方的路径已根据你的环境(
v24.14.0)预设,如果你切换了 Node 版本,请手动更新版本号。
cat <<EOF > ~/.config/systemd/user/openclaw-gateway.service
[Unit]
Description=OpenClaw Gateway Service
After=network.target
[Service]
Type=simple
# 明确指向 NVM 路径下的 openclaw 可执行文件
ExecStart=/home/$(whoami)/.nvm/versions/node/v24.14.0/bin/openclaw gateway
Restart=always
# 注入关键的 NVM 环境变量,确保 Node 能找到依赖库
Environment="PATH=/home/$(whoami)/.nvm/versions/node/v24.14.0/bin:/usr/local/bin:/usr/bin:/bin"
Environment="NODE_ENV=production"
[Install]
WantedBy=default.target
EOF
第三步:激活服务并让系统识别
运行以下命令,让 Systemd 感知并接管该服务:
# 1. 重新加载 Systemd 配置
systemctl --user daemon-reload
# 2. 启用服务(设置开机自启,并让 is-enabled 返回有效值)
systemctl --user enable openclaw-gateway.service
# 3. 立即启动服务
systemctl --user start openclaw-gateway.service
✅ 结果验证
现在运行以下命令检查状态:
systemctl --user is-enabled openclaw-gateway.service
预期输出: enabled
查看运行日志(确认没有路径报错):
journalctl --user -u openclaw-gateway.service -f
💡 小贴士
如果你未来更新了 Node.js 版本(例如升级到 v26.x.x),记得重新回到第二步修改配置文件中的路径,并再次执行 daemon-reload。
原创
解决 NVM 环境下 Systemd 无法识别 OpenClaw 服务的问题
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
赞赏支持
如果觉得文章对你有帮助,可以请作者喝杯咖啡 ☕
评论交流
欢迎留下你的想法