1. OpenClaw 在 Ubuntu 22.04 上到底难在哪
OpenClaw 是一个能读写文件、执行命令、调用外部 API 的本地智能体网关,适合想在 Ubuntu 22.04 上跑自动化任务、插件集成和代码执行的开发者。它的能力越强,环境依赖就越挑剔——Node 版本、编译链、权限模型、端口占用、日志策略,任何一环出问题都会以报错形式砸到你脸上。我前后在三台 Ubuntu 22.04 虚拟机(VMware 和物理机各占一半)上装过 OpenClaw,从依赖安装到卸载重装,踩过的坑足够整理成一份排障手册。
这篇内容聚焦 OpenClaw 在 Ubuntu 22.04 上的完整生命周期:环境准备、依赖安装、权限配置、服务启停、插件集成、升级卸载。每一条报错都给出可复制的检查命令和修复步骤,最后附上卸载残留的验证方法。如果你正在被EACCES、EADDRINUSE、node: command not found或者卸载后重装冲突折磨,可以直接跳到对应章节。
先给一个整体判断:OpenClaw 在 Ubuntu 22.04 上的问题大致分五类——系统环境类(虚拟机工具、内存、DNS)、依赖类(Node、npm、原生模块)、安装部署类(命令识别、端口)、配置类(YAML/JSON 解析、跨域)、运行与卸载类(日志、挂载残留、配置丢失)。下面逐类展开。
2. 环境准备与依赖安装:从系统层到 Node 运行时
2.1 虚拟机剪贴板失效与 OOM 被杀
VMware 里跑 Ubuntu 22.04,宿主机和虚拟机之间复制粘贴突然失效,或者 OpenClaw 进程莫名消失,先查两件事。剪贴板问题通常是open-vm-tools没装全或vmtoolsd服务挂了:
sudo apt install open-vm-tools open-vm-tools-desktop -y sudo systemctl restart vmtoolsd sudo systemctl status vmtoolsd如果vmtoolsd状态是inactive (dead),重启后仍不生效,检查是否被 mask 了:systemctl unmask vmtoolsd再启动。
内存不足导致 OOM 被杀,典型现象是dmesg里出现Out of memory: Killed process。OpenClaw 跑插件和代码执行时内存峰值不低,虚拟机至少给 4GB,并配置 swap:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab free -hfree -h确认 swap 已挂载。注意fallocate在某些文件系统上生成的 swap 文件可能不被识别,如果swapon报swapon failed: Invalid argument,改用dd if=/dev/zero of=/swapfile bs=1M count=4096。
2.2 Snap 后台占用与 DNS 解析失败
Ubuntu 22.04 默认预装 snapd,后台自动更新会周期性吃 CPU 和磁盘。如果你不用 Snap 应用,可以直接移除:
sudo apt remove --purge snapd -y sudo systemctl mask snapd移除后 Firefox 如果被一并删除,用sudo apt install firefox从 apt 源重装。这一步不是必须,但能减少后台干扰,让 OpenClaw 运行更稳。
DNS 解析失败表现为插件联网报getaddrinfo或dns resolve failed。虚拟机 NAT 模式下 DNS 转发容易出问题,临时改 DNS:
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf这是临时生效,重启会丢。要持久化,Ubuntu 22.04 用systemd-resolved的话改/etc/systemd/resolved.conf里的DNS=字段,然后sudo systemctl restart systemd-resolved。验证:nslookup registry.npmmirror.com能返回 IP 即可。
2.3 Node 版本不兼容与 npm 权限
OpenClaw 要求 Node 22 及以上。Ubuntu 22.04 默认源里的 Node 版本偏低,直接跑会报requires node >= 22或node: command not found。用 nvm 管理最干净:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash source ~/.bashrc nvm install 22 nvm use 22 node --version如果 NodeSource 脚本执行时报“不支持该文件类型”,通常是 curl 没装或下载不完整:
sudo apt update && sudo apt install curl -y curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs node -vnpm 全局安装报EACCES是经典权限问题。不要用sudo npm install -g,那会把全局目录搞成 root 所有,后续更乱。正确做法是给当前用户配一个全局前缀:
mkdir -p ~/.global-npm npm config set prefix '~/.global-npm' echo 'export PATH=~/.global-npm/bin:$PATH' >> ~/.bashrc source ~/.bashrc原生模块编译失败报gyp ERR!或build failed,装编译链即可:
sudo apt install build-essential python3-dev -ynpm 下载超时则切国内源并清缓存重装:
npm config set registry https://registry.npmmirror.com/ npm cache clean --force rm -rf node_modules package-lock.json && npm install3. 可复制配置:端口、跨域与工具权限
OpenClaw 的配置文件默认在~/.openclaw/下,核心是网关配置。端口占用报EADDRINUSE时,先查占用进程:
sudo lsof -i :18789 kill -9 <PID>不想杀进程就换端口。推荐改配置文件而不是每次命令行传参:
openclaw config set gateway.port 18788跨域拦截报blocked by CORS或access-control-allow-origin,需要在网关配置里加白名单。配置文件结构大致如下(路径以实际安装为准,通常在~/.openclaw/config.json或~/.openclaw/gateway.json):
{ "gateway": { "port": 18789, "mode": "local", "bind": "lan", "controlUi": { "allowedOrigins": [ "http://localhost:18789", "http://127.0.0.1:18789", "http://192.168.1.100:18789" ] } } }把192.168.1.100换成你虚拟机的实际 IP,用ip addr查。保存后重启网关:openclaw gateway restart。
Code Executor 插件报exec permission denied,是因为 v2026.3.2 之后默认收紧权限。个人使用可以开全量:
openclaw config set tools.profile full生产环境建议精细控制:
openclaw config set tools.exec.security full openclaw config set tools.exec.ask off如果你用 Cline MCP 或 Claude Code 这类外部工具接入 OpenClaw 网关,需要配全三件套:Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api,Key 在控制台生成,Model ID 按你实际使用的模型填。这三项缺任何一个都会报 401 或连接失败。
4. 验证请求与成功结果
配置改完后,先跑健康检查:
openclaw health返回status: ok或类似字段说明网关正常。再验证端口监听:
ss -tlnp | grep 18789应该看到LISTEN状态。如果换了端口,把 18789 换成新端口。
验证插件联网和 API 调用,可以用一个简单的 curl 请求测试网关是否响应:
curl -s http://127.0.0.1:18789/health返回 JSON 即通。如果走外部模型 API,确认 Key 有效:
curl -s https://taotoken.net/api/v1/models \ -H "Authorization: Bearer <你的Key>"能返回模型列表说明 Key 和网络都正常。这一步很关键——很多“插件加载失败”其实是 API Key 没配或网络不通,不是插件本身的问题。
后台常驻用 PM2 更稳,避免nohup秒退:
npm install -g pm2 pm2 start openclaw --name openclaw -- gateway pm2 status pm2 logs openclaw pm2 save pm2 startup ubuntupm2 startup会输出一条命令,复制执行才能注册开机自启。pm2 save保存当前进程列表,重启后自动恢复。
5. 常见报错对照与排查
401 Unauthorized:API Key 缺失或过期。检查环境变量和配置文件里的 Key 是否一致,重新生成后更新。
local proxy failed:本地代理配置错误或端口不通。确认网关端口没被占用,ss -tlnp查监听状态。
reading choices相关报错:通常是模型返回格式异常或 API 响应不完整。检查请求参数里的 model ID 是否正确,以及网络是否稳定。
OAuth报错:外部工具接入时授权流程未完成。重新走一遍授权,确认回调地址和端口匹配。
config parse failed/yaml parse error:配置文件格式错乱。YAML 对缩进敏感,JSON 少逗号也会崩。用 VSCode 打开逐行检查,或者从备份恢复:cp ~/.openclaw.bak.<日期>/config.json ~/.openclaw/config.json。
plugin load failed:插件依赖缺失或权限不足。先卸载重装插件,确认依赖完整;再检查防火墙是否拦截了插件联网;最后核对插件账号密钥。
429 rate limit exceeded:搜索类插件高频调用触发限流。增加请求间隔,或准备多个 Key 轮换。
no space left on device:日志堆积导致磁盘满。清当天日志并配轮转:
TODAY=$(date +%Y-%m-%d) truncate -s 0 "/tmp/openclaw/openclaw-$TODAY.log" sudo apt autoremove && sudo apt clean pm2 install pm2-logrotate/media挂载残留:非正常弹出 U 盘或镜像后留下无效挂载点。先df -h | grep /media确认,再sudo umount /media/用户名/挂载名,确认目录为空后删除。
6. 升级、卸载与重装:把残留清干净
升级前必须备份配置,否则 v2026.3.22 这类大版本重构会重置个性化设置:
openclaw --version openclaw gateway stop cp -r ~/.openclaw ~/.openclaw.bak.$(date +%Y%m%d) curl -fsSL https://openclaw.ai/install.sh | bash openclaw doctor --fix openclaw gateway restart openclaw healthopenclaw doctor --fix能自动修复大部分配置迁移问题,升级后先跑这个再启动。
卸载不彻底导致重装冲突,报conflict file exists或residual config,是因为只卸了 npm 包,用户目录下的隐藏配置和缓存还在。一键彻底卸载:
openclaw uninstall --all --yes手动清理更可控:
openclaw gateway stop openclaw gateway uninstall npm uninstall -g openclaw rm -rf ~/.openclaw ~/.cache/openclaw npm cache clean --force rm -rf ~/lib/node_modules/openclaw验证是否干净:
openclaw --version ls -la ~/.openclawopenclaw --version报 command not found 且~/.openclaw不存在,说明卸载干净。重装直接npm install -g openclaw即可。
如果你需要长期跑 OpenClaw 做编码或 Agent 任务,建议用 Coding Plan 管理额度和调用;只是验证模型对话效果,用模型对话页面更快;接入和排障过程中需要生成 Key,去 API Keys 页面操作。文档里有完整的接入参数和示例,遇到配置问题先翻文档再动手改。
最后提醒一句:OpenClaw 有完整的系统访问权限,能读写文件、执行命令。装插件前确认来源可信,定期审查已安装的技能列表,别让来路不明的插件拿到执行权限。卸载时把配置和缓存一起清掉,避免下次重装又踩同样的坑。