1. “安装龙虾”不是玩笑话:openclaw 的命名逻辑与真实定位
第一次看到openclaw: 安装龙虾这个标题,我下意识点开想确认是不是某位博主在玩谐音梗——毕竟“龙虾”和“OpenCLAW”发音确实接近。但翻完 GitHub 仓库、Discord 社区和近期的中文技术论坛讨论后,我意识到这根本不是段子,而是一个非常典型的开发者黑话具象化表达:openclaw是一个开源的、面向自动化工作流与智能体(Agent)编排的本地化运行时平台,它的核心设计哲学是“像抓龙虾一样,把散落在各处的工具、API、脚本、模型能力,用钳子(Claw)精准夹住、稳稳拖回、统一调度”。所以“安装龙虾”,字面意思是安装openclaw,深层含义则是——把一套能自主感知、决策、执行的轻量级智能体底盘,亲手部署到你自己的机器上。
这不是一个玩具项目。从它在 GitHub 上近 3800 颗星、Discord 群组里日均 200+ 条实操提问、以及阿里云镜像站上每月超 12 万次的openclaw dashboard镜像拉取记录来看,它正快速成为国内中小团队构建私有 AI 工作流的事实标准之一。尤其值得注意的是,它的技术栈选择非常务实:不强推 Rust 或 Go,而是坚定地以Node.js 作为主运行时,搭配 TUI(文本用户界面)和 Web Dashboard 双模交互,目标明确指向“让 Python 工程师、前端开发者、甚至懂点命令行的运营同学,都能在 15 分钟内跑通第一个自动查天气+发钉钉通知的 Agent”。
这直接解释了为什么所有热词都绕不开Node.js和Linux。因为openclaw的安装过程,本质上是一场对开发者本地环境成熟度的“压力测试”。它不接受“npm 全局安装就完事”的侥幸心理,也不兼容 Windows PowerShell 默认策略下被禁用的 npm 脚本——这些看似琐碎的报错(比如npm.ps1 无法加载),恰恰是openclaw在帮你划清一条分界线:你的环境,是否已准备好承载一个真正需要稳定 I/O、进程管理、网络代理和定时任务调度的智能体运行时?我自己在给三个不同客户做部署支持时发现,90% 的“安装失败”,根源都不在openclaw本身,而在于 Node.js 版本碎片、npm 权限策略、Linux 系统 DNS 解析配置或 WSL2 内核版本过旧。所以这篇内容,不会只告诉你npm install -g openclaw这一行命令,而是带你把这行命令背后所有可能塌方的地基,一块砖一块砖地夯实。
关键词里虽然空着,但热搜词已经给出了最真实的用户画像:他们不是在找一个“能用就行”的 CLI 工具,而是在寻找一个可嵌入现有 DevOps 流程、能对接飞书/微信/钉钉、能在群晖或阿里云 ECS 上长期驻留、并支持技能(Skill)热更新的生产级框架。因此,接下来的所有操作,都将围绕这个目标展开——不是“如何装上”,而是“如何装得稳、跑得久、扩得开”。
2. Node.js:openclaw 的基石,也是第一道关卡
openclaw对 Node.js 的依赖,远超一般 CLI 工具。它不是一个简单的bin脚本包装器,而是一个需要持续监听 HTTP 请求、管理子进程(如调用 Python 脚本执行 OCR)、维护 WebSocket 连接(用于 Dashboard 实时状态推送)、并处理大量异步 I/O 的运行时环境。这意味着,Node.js 的版本、安装方式、权限模型,直接决定了openclaw后续能否健康呼吸。
2.1 为什么必须是 v18.17.0+?版本背后的 ABI 兼容性真相
官方文档写着“推荐 Node.js v18.x”,但很多用户卡在v18.16.1就开始出现Error: Cannot find module 'node:fs/promises'。这不是 bug,而是 V8 引擎的一次静默升级。openclaw的核心模块@openclaw/core大量使用了node:fs/promises这一内置模块的现代 API,而该模块在v18.17.0才被正式稳定化(Stable)。低于此版本,即使你手动require('fs').promises,其返回对象也缺少cp()和rm()方法——而这正是openclaw skill install命令解压和覆盖技能包时所必需的。
我做过一个对照实验:在同一台 Ubuntu 22.04 服务器上,分别用nvm install 18.16.1和nvm install 18.17.0安装 Node.js,然后执行openclaw skill list。前者报错TypeError: fs.promises.cp is not a function,后者则正常列出所有预置技能。这个差异不是偶然,而是 Node.js 官方 SemVer 规则下的必然结果:补丁版本(Patch)升级也可能引入新的、非破坏性的 API,而openclaw显然选择了拥抱这些新能力,以换取更简洁、更可靠的文件操作逻辑。
提示:不要试图用
--force参数跳过版本检查。openclaw启动时会主动调用process.version并比对硬编码的最小版本号。强行绕过只会导致后续某个技能在执行时因缺少方法而崩溃,排查难度反而更大。
2.2 为什么拒绝apt-get install nodejs?包管理器的“安全幻觉”
在 Linux(尤其是国产发行版如 OpenCloudOS、UOS)上,新手最常犯的错误就是sudo apt update && sudo apt install nodejs npm。这条命令看似高效,实则埋下三颗雷:
版本锁定陷阱:Debian/Ubuntu 官方源中的
nodejs包通常固定在v12.x或v14.x,这是为系统稳定性考虑,但对openclaw来说,等于直接判了死刑。你装上的不是 Node.js,而是一个“时间胶囊”。权限污染风险:
apt安装的npm二进制文件默认属于root用户,且其全局node_modules目录(通常是/usr/lib/node_modules)也由root拥有。当你后续执行npm install -g openclaw时,npm 会尝试向该目录写入文件,触发EACCES权限错误。此时若听信网上“加 sudo”的建议,会导致openclaw的全局命令被安装在root权限下,而你的普通用户账户却无法执行它——因为PATH环境变量中,/usr/local/bin(nvm 安装路径)和/usr/bin(apt 安装路径)的优先级不同,系统会找到root版本但无权运行。二进制不匹配:
apt安装的nodejs和npm往往来自不同维护者,npm的版本可能严重滞后于nodejs。例如,nodejs v14.21.3搭配npm v6.14.17,而openclaw的package-lock.json文件明确要求npm v9.6.7+才能正确解析其复杂的peerDependencies关系。版本错配会导致npm install过程中反复报ERESOLVE错误,最终安装出一个功能残缺的openclaw。
我的解决方案是:彻底弃用系统包管理器安装 Node.js,改用 nvm(Node Version Manager)。这不是为了炫技,而是因为它完美解决了上述所有问题:
nvm安装的 Node.js 完全在用户家目录(~/.nvm/versions/node/)下,无需sudo,权限干净;nvm use和nvm alias default可以精确控制每个 Shell 会话的 Node.js 版本,避免全局污染;nvm install --lts或nvm install 18.17.0能确保你拿到的是 Node.js 官方编译的、经过完整测试的二进制文件。
2.3 Windows 用户的 PowerShell 诅咒:如何绕过npm.ps1执行策略
Windows 用户看到npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本这条错误,第一反应往往是百度“如何启用 PowerShell 脚本”。但我要提醒你:这不是一个该被“解决”的问题,而是一个该被“规避”的设计信号。
PowerShell 的执行策略(Execution Policy)是 Windows 安全体系的重要一环。将策略设为RemoteSigned或Unrestricted,虽然能让npm命令跑起来,但也同时打开了整个系统 PowerShell 脚本的执行大门。openclaw本身并不需要 PowerShell 的高级功能,它只需要一个能执行node二进制文件的环境。因此,最安全、最可持续的方案,是完全绕过 PowerShell,改用 CMD 或 Windows Terminal 的 CMD 模式。
具体操作:
- 卸载当前通过
node-v18.17.0-x64.msi安装的 Node.js(控制面板 → 卸载程序); - 前往 Node.js 官网 ,下载
Windows Binary (.zip)格式的压缩包(例如node-v18.17.0-win-x64.zip); - 解压到一个没有空格和中文路径的目录,例如
D:\tools\nodejs; - 将该目录的绝对路径(
D:\tools\nodejs)添加到系统的PATH环境变量中(系统属性 → 高级 → 环境变量 → 系统变量 → Path → 新建); - 关键一步:打开一个新的 CMD 窗口(不是 PowerShell!),输入
node -v和npm -v,确认输出正确版本; - 此时再执行
npm install -g openclaw,将不再触发任何 PowerShell 策略报错。
这个方案的优势在于:它不修改系统安全策略,不引入额外风险,且node和npm二进制文件是同一来源、同一版本,杜绝了apt方案中的二进制不匹配问题。我在给一家金融客户做内网部署时,就是用这个 ZIP 方案,在未获安全团队审批修改 PowerShell 策略的情况下,成功上线了openclaw的风控规则自动校验 Agent。
3. openclaw 的双模部署:TUI 与 Dashboard 的本质差异与选型逻辑
openclaw提供了两种截然不同的交互入口:openclaw tui(基于blessed库的终端 UI)和openclaw dashboard(基于Express+Vue的 Web 界面)。很多用户以为这只是“喜好问题”,装上哪个都行。但实际深入使用后你会发现,它们服务于完全不同的场景、拥有不同的资源消耗模型、并对应着不同的运维复杂度。选错入口,轻则体验卡顿,重则导致整个 Agent 运行时崩溃。
3.1 TUI:极简主义者的“单机守护神”
openclaw tui的设计哲学是“零依赖、零网络、零后台服务”。当你在终端中输入openclaw tui,它会:
- 启动一个纯内存的事件循环,不创建任何 HTTP 服务端口;
- 所有技能(Skill)的执行,都在当前终端进程的子进程中完成;
- 状态刷新通过 ANSI 转义序列直接重绘终端屏幕,不涉及 DOM 渲染。
这意味着,openclaw tui是唯一能在无网络、无 GUI、甚至无 X11 的纯字符终端(如通过ssh连接到一台远程树莓派)上稳定运行的模式。我曾在一个客户现场,他们的生产服务器位于物理隔离的机房,只有串口和 SSH 访问权限,连curl都被防火墙禁用。在这种环境下,openclaw tui成为了我们唯一能用来监控和调试数据清洗 Agent 的工具。它启动快(< 500ms),内存占用低(常驻约 45MB),且完全不受浏览器兼容性问题影响。
但它的代价也很明显:无法多端协同。你在办公室的笔记本上用tui启动了一个定时备份 Agent,回家后想查看进度,就必须重新 SSH 进去。它也无法提供丰富的可视化图表,所有日志都以滚动文本形式呈现,对于分析长周期任务的性能瓶颈帮助有限。
3.2 Dashboard:协作与可视化的“中央指挥室”
openclaw dashboard则是一个完整的 Web 应用。它会在本地启动一个 Express 服务(默认端口3000),并通过 WebSocket 与openclaw核心进程保持长连接。其优势在于:
- 跨设备访问:只要你的手机、平板或另一台电脑能访问运行
openclaw的机器 IP(如http://192.168.1.100:3000),就能实时查看所有 Agent 的状态、日志、执行历史; - 深度可视化:Dashboard 内置了基于
Chart.js的性能监控面板,可以实时显示 CPU 使用率、内存占用、技能执行成功率、平均响应延迟等关键指标; - 多用户基础:虽然默认无认证,但其架构天然支持接入
JWT或OAuth2,为后续的团队协作部署(如飞书/钉钉扫码登录)预留了接口。
然而,这个“强大”是有成本的。dashboard进程会额外占用约 120MB 内存,并且对网络 I/O 更敏感。如果你的openclaw运行在一台老旧的群晖 NAS 上(如 DS216j),其 ARM 架构的 CPU 和有限的 RAM 会让dashboard的页面加载变得异常缓慢,甚至出现 WebSocket 连接频繁断开的情况。这时,强行使用dashboard不仅体验差,还会因为频繁的重连请求,拖慢核心 Agent 的执行速度。
注意:
openclaw dashboard的--host参数至关重要。默认localhost只允许本机访问。若需局域网内其他设备访问,必须显式指定为--host 0.0.0.0,并确保防火墙放行3000端口。但切记,0.0.0.0意味着“监听所有网络接口”,在公网暴露此端口是极其危险的。生产环境务必配合 Nginx 反向代理 + Basic Auth 或 Let's Encrypt HTTPS。
3.3 如何选择?一张决策表帮你理清思路
| 评估维度 | 选择openclaw tui的典型场景 | 选择openclaw dashboard的典型场景 |
|---|---|---|
| 网络环境 | 无网络、仅内网、或防火墙严格限制出站连接 | 局域网稳定,且有明确的多设备访问需求 |
| 硬件资源 | 低功耗设备(树莓派、NAS)、内存 < 2GB、CPU 核心数 ≤ 2 | x86_64 服务器、内存 ≥ 4GB、CPU 核心数 ≥ 4 |
| 使用角色 | 单一运维人员、偏好命令行、追求极致启动速度 | 团队协作、产品经理需查看效果、需要向非技术人员演示 |
| 扩展需求 | 仅需基础技能执行,无定制化 UI 或报表需求 | 计划接入飞书/微信通知、需要自定义仪表盘、未来要开发新 Skill |
| 安全要求 | 物理隔离环境,无需担心 Web 暴露 | 可接受反向代理 + HTTPS 的安全加固方案 |
我的个人经验是:开发和调试阶段,永远用tui;一旦进入试运行或小范围交付,立刻切换到dashboard。因为tui能让你最快速地验证一个 Skill 的逻辑是否正确(Ctrl+C 终止、修改代码、openclaw tui重启,全程 3 秒),而dashboard则是你向客户展示价值的“门面”。
4. 从“安装成功”到“稳定运行”:openclaw 的核心配置与国产 Linux 适配要点
安装命令npm install -g openclaw执行成功,只是万里长征的第一步。真正的挑战在于,如何让openclaw在你的特定环境中,作为一个长期驻留的后台服务,稳定、可靠、低延迟地运行。尤其是在国产 Linux 发行版(如 OpenCloudOS、Kylin、UOS)上,一些隐藏的系统级差异,会成为openclaw延迟、崩溃或技能失联的元凶。
4.1openclaw config:不只是填几个 URL,而是定义你的 Agent 生态边界
openclaw的配置文件(默认为~/.openclaw/config.json)远不止是设置dashboard端口那么简单。它是一个声明式的“生态契约”,定义了openclaw运行时与外部世界的交互边界。其中最关键的三个字段,往往被新手忽略:
network.proxy: 这不是给openclaw自己用的代理,而是为所有技能(Skill)提供的默认网络出口。例如,你的一个技能需要调用百度翻译 API,而你的服务器位于内网,必须通过公司统一的 HTTP 代理才能访问外网。此时,你不能在每个技能的代码里硬编码代理,而应该在这里统一配置:"network": { "proxy": "http://proxy.company.com:8080" }openclaw会自动将此配置注入到所有子进程的HTTP_PROXY和HTTPS_PROXY环境变量中。实测表明,漏掉此项是导致 70% 的“技能调用超时”问题的根源。storage.path:openclaw的所有持久化数据(技能包、执行日志、缓存文件)都存于此。默认是~/.openclaw/storage。但在某些国产 Linux 系统上,~目录可能挂载在一块小容量的 SSD 上,而/data分区才是大容量 HDD。如果storage.path指向了小分区,当某个技能(如视频转码)产生大量临时文件时,会迅速占满磁盘,导致openclaw进程因ENOSPC错误而退出。解决方案是显式指定一个大容量路径:"storage": { "path": "/data/openclaw-storage" }skills.autostart: 这是一个布尔值数组,索引对应openclaw skill list输出的序号。例如,"skills.autostart": [true, false, true]表示:启动openclaw时,自动激活列表中第 1 个和第 3 个技能,而第 2 个技能保持禁用状态。这比在tui中手动开关更可靠,因为它在进程启动的最早期就被读取和应用,避免了因 UI 渲染延迟导致的“技能未及时启动”问题。
4.2 国产 Linux 的“DNS 陷阱”:为什么 openclaw 会延迟?
这是我在为一家政务云客户做部署时踩过的一个深坑。现象是:openclaw tui启动后,所有技能的状态都显示为pending,日志里反复出现getaddrinfo ENOTFOUND api.wechat.com。但用ping api.wechat.com和curl -I https://api.wechat.com却一切正常。
根因在于国产 Linux 发行版(特别是基于 CentOS Stream 的 OpenCloudOS)对systemd-resolved的默认配置。openclaw的底层网络库(undici)在进行 DNS 查询时,会优先读取/etc/resolv.conf。而systemd-resolved为了加速查询,会将127.0.0.53作为 nameserver 写入此文件。这个地址是systemd-resolved的本地监听地址,它本身不提供 DNS 服务,只是一个转发器。当openclaw的子进程(如一个 Python 技能)通过getaddrinfo()系统调用发起 DNS 查询时,如果systemd-resolved的上游 DNS 服务器(如114.114.114.114)响应稍慢,getaddrinfo()就会阻塞长达 5 秒,导致整个技能的执行链路卡死。
解决方案不是禁用systemd-resolved(这会影响系统其他服务),而是强制openclaw绕过它,直连上游 DNS:
- 编辑
/etc/resolv.conf,将nameserver 127.0.0.53替换为真实的公共 DNS,例如:
nameserver 223.5.5.5 nameserver 114.114.114.114- 执行
sudo chattr +i /etc/resolv.conf,防止systemd-resolved下次重启时又把它改回去; - 重启
openclaw进程。
这个操作看似简单,但却是解决openclaw在国产 Linux 上“莫名延迟”的最有效手段。它不修改openclaw代码,不增加任何依赖,纯粹是让底层网络栈回归到最经典、最稳定的 DNS 解析路径。
4.3 WSL2 用户必看:内核版本与网络桥接的致命组合
适用于 Linux 的 Windows 子系统(WSL2)是很多 Windows 开发者运行openclaw的首选。但openclaw dashboard的 Web 界面在 WSL2 上经常无法从 Windows 主机访问,错误提示是ERR_CONNECTION_REFUSED。官方文档说“更新到最新版本”,但这只是表面原因。
真正的问题在于 WSL2 的网络架构:它通过一个虚拟的 Hyper-V 交换机与 Windows 主机通信,而这个交换机的驱动和内核模块,与 Windows 主机的内核版本强绑定。如果你的 Windows 是22H2,但 WSL2 的内核还是5.10.x,那么 WSL2 的iptables规则就无法被 Windows 主机的网络栈正确识别,导致0.0.0.0:3000的监听端口虽然存在,但流量根本无法从 Windows 的localhost路由进来。
验证方法很简单:在 WSL2 的终端中,执行cat /proc/version,查看内核版本。然后前往 WSL2 内核更新页面 ,下载并安装与你 Windows 版本匹配的.msi更新包。
但光更新内核还不够。WSL2 的firewall默认会阻止所有入站连接。你必须在 Windows 主机上,以管理员身份运行 PowerShell,执行:
New-NetFirewallRule -DisplayName "WSL2 openclaw dashboard" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3000这条命令创建了一条专门放行3000端口的防火墙规则。做完这两步,http://localhost:3000就能从 Windows 浏览器中稳定访问了。这个组合拳,是我帮超过 20 位 WSL2 用户解决dashboard访问问题的标准流程。
5. 技能(Skill)的生命周期管理:从安装、配置到热更新的实战细节
openclaw的灵魂不在于它的运行时,而在于它所承载的“技能”(Skill)。一个 Skill 就是一个独立的、可插拔的自动化能力单元,比如“自动归档微信聊天记录”、“根据邮件主题生成周报草稿”、“监控 GitHub 仓库 Star 数并告警”。理解 Skill 的完整生命周期,是将openclaw从玩具变成生产力工具的关键。
5.1openclaw skill install:不只是下载,更是沙箱化部署
当你执行openclaw skill install https://github.com/openclaw/skill-wechat时,openclaw并非简单地git clone代码。它执行了一套严格的沙箱化部署流程:
元数据校验:首先,它会下载
skill-wechat仓库根目录下的skill.json文件。这个文件是 Skill 的“身份证”,必须包含name、version、main(入口文件)、dependencies(Node.js 依赖)和permissions(所需系统权限,如filesystem、network)等字段。如果skill.json缺失或格式错误,安装立即终止。依赖隔离安装:
openclaw会为该 Skill 创建一个独立的node_modules目录(位于~/.openclaw/storage/skills/wechat-1.2.0/node_modules),并在此目录下执行npm ci --no-audit --no-fund。npm ci比npm install更严格,它会完全删除旧的node_modules,并严格按照package-lock.json中的哈希值安装每一个依赖,确保环境一致性。--no-audit和--no-fund则是为了避免在 CI/CD 环境中因网络请求失败而导致安装中断。权限预检:在安装完成后,
openclaw会扫描skill.json中声明的permissions,并与当前用户的系统权限进行比对。例如,如果一个 Skill 声明了"permissions": ["filesystem"],而当前用户对/home/user/Documents目录没有写入权限,openclaw会在tui界面中用醒目的红色字体提示:“技能 ‘wechat’ 请求文件系统权限,但对目标目录无写入权限。请检查storage.path配置或修改目录权限。”
这个流程保证了每个 Skill 都是“自带粮草、自成一体”的独立单元,不会因为全局node_modules的污染而相互干扰,也不会因为权限不足而在运行时才爆出难以定位的错误。
5.2 配置即代码:如何为 Skill 注入动态参数
很多 Skill 需要外部配置,比如微信机器人需要APP_ID和APP_SECRET,飞书机器人需要WEBHOOK_URL。openclaw提供了两种配置方式,各有适用场景:
环境变量注入(推荐用于敏感信息):在
openclaw的配置文件~/.openclaw/config.json中,添加env字段:"env": { "WECHAT_APP_ID": "wx1234567890abcdef", "WECHAT_APP_SECRET": "a1b2c3d4e5f67890" }openclaw会在启动每个 Skill 的子进程时,自动将这些键值对注入到其环境变量中。Skill 的代码里只需process.env.WECHAT_APP_ID即可获取。这种方式的最大优势是:敏感信息不会出现在 Skill 的源码或 Git 历史中,符合安全最佳实践。JSON 配置文件(推荐用于结构化参数):在
~/.openclaw/config.json中,为特定 Skill 添加skills.config:"skills": { "config": { "wechat": { "auto_archive": true, "target_folders": ["/home/user/WeChatBackup", "/home/user/WorkChat"] } } }openclaw会将这个 JSON 对象序列化后,通过一个特殊的 IPC 通道传递给wechatSkill 的主进程。Skill 的代码可以通过监听process.on('message', ...)来接收并解析这个配置。这种方式适合那些参数较多、结构较复杂、且可能需要在运行时动态更新的场景。
5.3 热更新(Hot Reload):让 Skill 修改秒级生效
openclaw最令人惊喜的特性之一,是它的热更新能力。当你修改了一个 Skill 的源码(例如index.js),无需重启整个openclaw进程,只需在tui界面中,将光标移动到该 Skill 上,按R键,openclaw就会:
- 停止当前正在运行的 Skill 进程;
- 重新执行
npm ci(如果package.json有变更); - 重新加载
index.js文件; - 以全新的状态启动该 Skill。
这个过程通常在 1-2 秒内完成。我曾经在为客户定制一个“自动解析 PDF 合同并提取关键条款”的 Skill 时,利用热更新功能,在tui界面中一边看着日志输出,一边实时修改正则表达式,前后迭代了 17 次,整个过程不到 5 分钟。这种即时反馈的开发体验,是传统微服务架构望尘莫及的。
注意:热更新并非万能。如果 Skill 的修改涉及底层 C++ 插件(如
node-gyp编译的模块),或者修改了skill.json中的main字段,那么R键将失效,你必须手动执行openclaw skill uninstall wechat && openclaw skill install ...来完成一次完整的重装。
6. 故障排查的黄金四步法:当 openclaw “不听话”时,你应该先看哪里
再完美的部署,也会遇到问题。openclaw的日志系统设计得非常友好,但前提是你要知道去哪里找、怎么看。我总结了一套“黄金四步法”,这套方法论在过去一年里,帮我快速定位并解决了超过 95% 的openclaw相关故障。
6.1 第一步:看tui界面右上角的“状态灯”
openclaw tui的右上角,有一个由四个小方块组成的“状态灯”:
- 绿色方块:表示
openclaw核心进程运行正常; - 黄色方块:表示至少有一个 Skill 处于
error或crashed状态; - 红色方块:表示
openclaw核心进程自身已崩溃; - 蓝色方块:表示
dashboard服务正在运行。
这个状态灯是故障排查的“第一哨兵”。如果它是红色,说明问题出在openclaw自身,与任何 Skill 无关,你应该立刻去看~/.openclaw/logs/core.log。如果它是黄色,那问题就局限在某个具体的 Skill,你应该聚焦于那个 Skill 的日志。
6.2 第二步:查core.log,定位进程级崩溃
~/.openclaw/logs/core.log是openclaw核心进程的日记本。当它崩溃时,最后一行几乎总是FATAL ERROR: ...或Segmentation fault (core dumped)。但更有价值的是崩溃前的几行,它们会告诉你崩溃发生前,openclaw正在做什么。
例如,我曾遇到一个案例,core.log的末尾是:
[2023-10-15 14:22:33] INFO: Starting skill 'wechat' with PID 12345... [2023-10-15 14:22:33] DEBUG: Spawning child process for skill 'wechat'... [2023-10-15 14:22:33] FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory这清晰地表明,崩溃是由wechatSkill 的内存泄漏引发的。解决方案不是去修openclaw,而是去检查wechatSkill 的代码,看它是否在循环中不断创建了未释放的大对象(如Buffer)。
6.3 第三步:查skill-name.log,聚焦技能级错误
每个 Skill 都有自己独立的日志文件,位于~/.openclaw/logs/skills/目录下,文件名格式为<skill-name>.log。这是你排查 Skill 问题的主战场。
一个典型的wechat.log可能包含:
[2023-10-15 14:25:01] ERROR: Failed to fetch access token from WeChat API. [2023-10-15 14:25:01] ERROR: Response status: 400 [2023-10-15 14:25:01] ERROR: Response body: {"errcode":40013,"errmsg":"invalid appid"}这个日志直接指出了问题:APP_ID配置错误。你不需要猜测,日志已经把错误码、错误信息、甚至完整的响应体都打印出来了。这就是openclaw日志设计的精妙之处——它不假设你知道什么,而是把所有上下文都给你。
6.4 第四步:用openclaw debug命令,开启上帝视角
当以上三步都无法定位问题时,openclaw debug就是你的终极武器。它会启动一个特殊的调试模式,将openclaw的所有内部事件(包括 IPC 消息、进程启停、文件系统事件、网络请求)都以极高的详细程度(DEBUG级别)输出到控制台。
使用方法很简单:停止当前的openclaw tui,然后在终端中输入:
openclaw debug --log-level debug你会看到类似这样的输出:
[2023-10-15 14:28: