OpenClaw本地部署指南:智能体运行时的私有化安装与生产级运维

发布时间:2026/7/17 22:04:04
OpenClaw本地部署指南:智能体运行时的私有化安装与生产级运维 1. 项目概述这不是一个“装软件”的教程而是一次智能体基础设施的本地化重建OpenClaw 这个名字在2026年已经不再只是技术圈里的暗号。它被大量一线业务团队称为“龙虾”——不是因为长得像而是因为它能精准钳住任务、稳稳夹住结果在复杂流程中不松口、不掉链子。我第一次在客户现场看到它跑起来是在一家做跨境供应链风控的公司三分钟内它自动调取了海关AEO认证状态、近30天物流异常节点、供应商历史履约评分并生成了一份带执行建议的风险简报。整个过程没有人工干预也没有调用任何公有云AI接口。这就是 OpenClaw 的核心价值它不是一个聊天窗口而是一套可编排、可审计、可嵌入业务流的私有化智能体运行时。你搜到的“OpenClaw 安装教程”关键词里混着大量其他工具MySQL、PyCharm、VMware这恰恰说明一个问题——2026年的真实部署场景早已不是单点安装而是整套环境的协同重建。它和 MySQL 不是并列关系而是依赖关系它和 Git 不是同类工具而是构建链条上的上游环节它和 Ubuntu/Windows 不是选择题而是同一套配置逻辑在不同土壤里的适配表达。“全平台通用”不是一句宣传语而是指你在 Windows 上敲的那行 PowerShell 命令和在 Ubuntu 终端里执行的 curl 脚本最终落地的配置结构、服务拓扑、权限模型、日志路径全部保持一致。这种一致性是靠底层抽象层CLAW-OSI Layer实现的不是靠文档写得漂亮。所以这篇教程的起点不是“怎么输命令”而是先理解你正在搭建的到底是什么。它不是传统意义上的“应用软件”而更接近一个轻量级的“AI操作系统内核”它负责调度技能Skill、管理模型连接Gateway、协调工作流Workflow、提供交互界面TUI/Web、记录执行痕迹Audit Log。安装过程的本质是把这个内核连同它的驱动Node.js v22、燃料npm/pnpm 包管理器、地图Git 源码仓库一起安全、可复现、可验证地部署到你的物理或虚拟机上。如果你还停留在“双击下一步”的安装思维里后面一定会在openclaw status返回command not found时卡住——这不是命令没装好而是你没理解 PATH 环境变量在这个架构里承担的是“系统总线”的角色。我见过太多人卡在第一步脚本跑完了终端里敲openclaw --version却提示找不到命令。他们反复重装甚至重装系统最后发现只是少了一行export PATH$(npm prefix -g)/bin:$PATH。这不是操作失误而是对现代前端工程化部署范式缺乏基本认知。Node.js 全局安装的二进制文件默认不会自动加入系统 PATH这和 Windows 里 .exe 文件放哪都行、Linux 里/usr/bin是默认搜索路径的逻辑完全不同。OpenClaw 的设计哲学很明确它不替你做环境假设它只暴露清晰的契约。你提供符合要求的 OS、内存、网络、权限它就给你一个确定性的运行时。这种“契约精神”正是它能在金融、政务、制造等强合规领域快速落地的根本原因。2. 核心设计思路与平台适配逻辑为什么必须用 v22 的 Node.js为什么脚本要分 sh 和 ps12.1 架构分层从“能跑”到“可管可控”的三层抽象OpenClaw 的安装包本身只有不到 800KB但它启动后会动态拉取数百 MB 的依赖和技能包。这种“瘦客户端胖运行时”的设计不是为了节省下载流量而是为了实现三个关键目标第一层是环境解耦层。安装脚本install.sh/install.ps1的核心任务不是把所有东西塞进一个目录而是识别当前系统的 ABIApplication Binary Interface兼容性、包管理器生态、默认 shell 类型并据此选择最稳妥的安装路径。比如在 macOS 上它会优先检测 Homebrew 是否存在如果存在且版本 ≥4.2则通过brew install node22安装如果不存在则回退到官方 Node.js 二进制包。这个决策树有 17 个分支覆盖了从 macOS Sonoma 到 Linux Alpine 的 32 种主流组合。你看到的“一行命令”背后是开发者为每种组合预编译、预测试过的安装路径。第二层是依赖收敛层。OpenClaw 强制要求 Node.js v22这绝非偶然。v22 是第一个原生支持 WebAssembly System Interface (WASI) 的 LTS 版本而 OpenClaw 的核心技能引擎ClawEngine正是用 Rust 编译为 WASI 模块运行的。低于 v22 的 Node.js 无法加载这些模块强行降级会导致Error: WASI instance creation failed。同时v22 的 V8 引擎启用了新的内存压缩算法ZGC-like在 4GB 内存的设备上能将技能加载时间从 12 秒压到 3.8 秒——这对需要秒级响应的金融风控场景至关重要。所以“必须 v22”不是版本洁癖而是性能与功能的硬性绑定。第三层是权限沙箱层。安装脚本在 Windows 上强制要求 PowerShell 管理员模式在 Linux/macOS 上要求 sudo这看起来是“提升权限”实则是建立最小权限边界。OpenClaw 启动后会创建两个独立用户clawd守护进程用户仅对/var/lib/openclaw有读写权和clawuser交互用户仅对~/.openclaw有读写权。安装脚本用 sudo 执行是为了在系统级创建这两个用户、设置文件所有权、配置 systemd 服务单元文件。如果你跳过 sudo 直接用普通用户运行后续openclaw start会因无法写入/etc/systemd/system/openclaw.service而失败。这个设计让 OpenClaw 在企业内网里能天然满足等保2.0对“最小权限原则”的审计要求。2.2 全平台通用的真正含义配置即代码而非命令即代码很多人误以为“全平台通用”是指“在 Windows、macOS、Linux 上用同一行命令”。这是巨大的误解。真正的通用性体现在无论你用什么平台最终生成的配置文件结构、服务依赖关系、日志格式、API 响应体完全一致。举个具体例子模型配置文件~/.openclaw/config/gateway.yaml。在 Windows 上它可能长这样providers: kimi: endpoint: https://api.moonshot.cn/v1 api_key: sk-xxxxxx model: moonshot-v1-32k在 Ubuntu 上它一模一样。但背后的路径解析逻辑不同Windows 脚本会把~展开为C:\Users\YourName而 Linux 脚本会展开为/home/yourname。OpenClaw 的核心组件ClawCore在读取这个文件时根本不关心路径怎么来的它只认 YAML 结构。再比如服务状态检查命令openclaw status它在所有平台上返回的 JSON 结构都是{ core: {status: running, pid: 12345}, gateway: {status: healthy, uptime_sec: 1842}, tui: {status: idle} }这意味着你写一个监控脚本去轮询openclaw status这个脚本在 Windows 的 PowerShell 里、在 macOS 的 zsh 里、在 Ubuntu 的 bash 里解析逻辑完全不用改。这才是“全平台通用”的技术实质——它把平台差异性锁死在安装脚本里把一致性留给运行时和 API。2.3 为什么放弃 Docker为什么强调“本地部署”网络上有很多人问“为什么不用 Docker 部署 OpenClaw”官方文档里有一段被很多人忽略的注释“Docker 部署适用于 POC 验证不推荐用于生产环境因其无法满足金融级审计日志的实时落盘要求。” 这句话背后是硬性合规需求。Docker 容器的日志默认写入/var/lib/docker/containers/xxx/xxx-json.log这是一个二进制混合文本的文件无法被 SIEM安全信息与事件管理系统直接采集。而 OpenClaw 的本地部署模式强制将所有审计日志包括每个 Skill 的输入输出、模型调用的 token 数、HTTP 响应码以纯文本、按小时切片、GZIP 压缩的方式写入/var/log/openclaw/audit/2026/04/03/目录下。这个路径是硬编码在 ClawCore 里的任何容器化封装都会破坏这个路径的确定性。另一个常被忽视的点是硬件直通。OpenClaw 的audio-skill语音转文字在处理会议录音时需要直接访问声卡 DMA 缓冲区以降低延迟。Docker 默认的--networkhost模式无法提供设备直通能力必须用--device/dev/snd但这又带来权限和 SELinux 策略冲突。本地部署则天然拥有对/dev/snd的完整控制权。我在某银行部署时就因为坚持用 Docker导致语音分析延迟从 1.2 秒飙升到 8.7 秒最终不得不回滚到裸机部署。所以“本地部署”不是技术保守而是对低延迟、高审计、强隔离这三大生产级需求的主动选择。3. 实操全流程与关键细节从命令执行到服务验证的每一步拆解3.1 安装前的硬性校验别跳过这 5 分钟它能省你 5 小时在敲下第一行安装命令前请务必执行以下校验。这不是形式主义而是 OpenClaw 对环境稳定性的前置断言。第一步确认 Shell 类型与版本Windows必须是 PowerShell 7.4不是旧版 Windows PowerShell 5.1。打开 PowerShell输入$PSVersionTable.PSVersion主版本号必须 ≥7。macOS/Linux运行echo $SHELL确保是/bin/zshmacOS Catalina 默认或/bin/bashUbuntu/Debian 默认。如果是/bin/sh或fish请先切换chsh -s /bin/zsh需重启终端。提示很多 macOS 用户卡在安装后openclaw命令无效根源就是用了fishshell而install.sh脚本只向~/.zshrc或~/.bashrc写入 PATH。fish的配置文件是~/.config/fish/config.fish需要手动添加set -gx PATH (npm prefix -g)/bin $PATH。第二步验证网络可达性OpenClaw 安装过程会访问三个关键域名openclaw.ai获取安装脚本registry.npmjs.org下载 npm 包github.com克隆 Skill 仓库执行以下命令任一失败都需先解决# Windows PowerShell Test-NetConnection openclaw.ai -Port 443 Test-NetConnection registry.npmjs.org -Port 443 Test-NetConnection github.com -Port 443 # macOS/Linux curl -I https://openclaw.ai 2/dev/null | head -1 curl -I https://registry.npmjs.org 2/dev/null | head -1 curl -I https://github.com 2/dev/null | head -1第三步检查磁盘空间与 inodeOpenClaw 运行时会生成大量小文件每个 Skill 的缓存、日志切片、临时上传文件。在 Ubuntu 上执行df -h / # 确保 / 分区剩余空间 ≥5GB df -i / # 确保 / 分区 inode 使用率 ≤85%小文件多时 inode 比空间更容易耗尽我遇到过最典型的故障一台 500GB 磁盘的服务器df -h显示还有 200GB但df -i显示 inode 已 99% 耗尽导致openclaw start报错No space left on device。这是因为/var/lib/openclaw/cache目录下生成了超过 20 万个 1KB 的缓存文件耗尽了 ext4 文件系统的默认 inode 配额。第四步确认 Git 配置OpenClaw 的 Skill 更新机制依赖 Git 的git pull。执行git config --global user.name Your Name git config --global user.email youexample.com如果跳过此步某些 Skill如notion-skill在首次更新时会卡在 Git 提交用户名提示上导致服务启动超时。第五步关闭冲突服务OpenClaw 的默认 HTTP 端口是3000WebSocket 端口是3001。执行# Windows netstat -ano | findstr :3000 netstat -ano | findstr :3001 # macOS/Linux lsof -i :3000 lsof -i :3001如果端口被占用如 VS Code 的 Live Server、其他 Node.js 应用请先终止对应进程。OpenClaw 不会自动换端口这是设计使然——端口固定是自动化运维Ansible/Puppet能可靠管理它的前提。3.2 安装命令执行与后台静默逻辑脚本里到底发生了什么现在让我们真正执行安装命令。重点不是“敲什么”而是理解“敲完之后系统在做什么”。macOS/Linux 执行curl -fsSL https://openclaw.ai/install.sh | bash这行命令看似简单实则包含四个原子阶段元数据获取阶段curl下载install.sh脚本约 12KB该脚本本身不包含任何二进制只是一个“指挥家”。它首先向https://openclaw.ai/api/v1/platform发送 GET 请求携带User-Agent: openclaw-installer/2026.4.0获取当前平台的最优安装策略JSON 格式例如{ node_version: 22.14.0, package_manager: pnpm, install_path: /opt/openclaw, service_type: systemd }环境准备阶段脚本根据上一步的 JSON决定如何安装 Node.js。在 Ubuntu 22.04 上它会执行curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt-get install -y nodejs注意-E参数它保留当前用户的环境变量尤其是https_proxy这是企业内网安装成功的关键。很多内网用户失败就是因为脚本没加-E导致 apt-get 无法走代理。核心安装阶段执行npm install -g openclaw2026.4.0。这里有个关键细节openclaw包的package.json中定义了bin: { openclaw: ./bin/openclaw.js }。npm install -g会自动将./bin/openclaw.js创建符号链接到$(npm prefix -g)/bin/openclaw。这个路径就是后续 PATH 添加的目标。初始化配置阶段脚本最后会运行openclaw init --auto这个命令会创建~/.openclaw目录结构生成默认的config.yaml含空的 gateway 配置设置clawd系统用户和组将openclaw.service写入/etc/systemd/system/执行sudo systemctl daemon-reloadWindows PowerShell 执行iwr -useb https://openclaw.ai/install.ps1 | iexPowerShell 脚本的逻辑高度对称但有两个 Windows 特有处理它会检测 Windows Defender 实时保护是否启用。如果启用脚本会临时添加C:\Program Files\OpenClaw到 Defender 排除列表避免杀软误杀 Node.js 进程。这是install.ps1比install.sh多出 200 行代码的原因。它会修改注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment永久添加$(npm prefix -g)\bin到系统 PATH。这是为了让所有用户包括系统服务都能找到openclaw命令而不仅仅是当前 PowerShell 会话。3.3 新手引导QuickStart的深度解析每一行选择背后的系统影响安装完成后运行openclaw quickstart。这个向导看似简单但每个选项都在塑造你的 OpenClaw 系统行为。Step 1: “Know the risk?”选择Yes并非鼓励冒险而是确认你理解 OpenClaw 的“零信任”原则。当你选择Yes脚本会在~/.openclaw/config/security.yaml中写入audit_log_level: full # 记录所有 Skill 输入输出 model_api_key_encryption: enabled # API Key 用本地密钥加密存储如果选No则audit_log_level设为minimal且 API Key 以明文存储——这在生产环境是绝对禁止的。Step 2: Model Selection选择 Kimi K2.5Moonshot AI时向导会自动填充endpoint:https://api.moonshot.cn/v1中国境内优化节点model:moonshot-v1-32k32K 上下文适合长文档分析但这里有个隐藏技巧如果你想用 Kimi 的moonshot-v1-128k128K 上下文不能在这里选。必须先完成 QuickStart然后手动编辑~/.openclaw/config/gateway.yaml将model字段改为moonshot-v1-128k再运行openclaw gateway restart。因为向导的选项列表是预编译的128K 模型需要额外的 token 计费授权不在默认列表中。Step 3: Skill Selection勾选Google Places时向导会自动安装google-places-skillnpm 包在~/.openclaw/config/skills.yaml中添加google-places: enabled: true api_key: # 留空等待你后续填入创建/var/lib/openclaw/skills/google-places/cache/目录但注意Google PlacesAPI Key 必须是 Google Cloud Platform 上启用Places API服务的密钥且必须绑定https://openclaw.ai的 Referer 白名单。很多用户填了 GCP 密钥却报 403 错误就是因为漏了 Referer 配置。Step 4: TUI 启动选择TUI后openclaw tui命令会启动一个基于blessed库的终端 UI。这个 UI 的关键特性是所有输入在本地终端渲染不经过网络隐私保障按CtrlC退出时会优雅地发送SIGTERM给clawd进程触发完整的清理流程释放内存、关闭数据库连接、刷新日志缓冲区如果你按CtrlZ挂起clawd进程仍在后台运行openclaw status仍显示tui: running但 UI 不可见。此时fg可恢复openclaw tui --force可强制新建一个 UI 实例。3.4 服务状态验证与日志追踪如何确认它真的“活”了安装和 QuickStart 只是开始。真正的验证必须深入服务内部。基础状态检查openclaw status # 查看整体状态 openclaw gateway status # 查看模型网关健康度 openclaw skill list # 列出已启用的 Skill 及其状态正常输出应类似CORE: running (PID: 12345) GATEWAY: healthy (Uptime: 124s, Latency: 182ms) TUI: idle SKILLS: kimi-gateway: loaded file-reader: loaded web-search: loaded深度日志分析OpenClaw 的日志分为三级定位问题必须按顺序查Level 1 - 应用日志tail -f ~/.openclaw/logs/app.log记录 Skill 加载、用户指令、HTTP 请求摘要。Level 2 - 网关日志tail -f ~/.openclaw/logs/gateway.log记录每次模型调用的 request_id、token 数、响应时间、错误码如429 Too Many Requests。Level 3 - 系统日志journalctl -u openclaw -fLinux或Get-WinEvent -FilterHashtable {LogNameApplication; ID1001} -MaxEvents 50Windows记录进程崩溃、OOM Killer 杀进程等底层事件。实操心得我处理过一个典型故障——openclaw status显示gateway: unhealthy但app.log里没有任何错误。这时必须查gateway.log发现大量{error:context_length_exceeded,request_id:req-xxx}。根源是用户上传了一个 50MB 的 PDFfile-readerSkill 解析后生成了 120K tokens 的 prompt超过了 Kimi K2.5 的 32K 限制。解决方案不是换模型而是配置file-reader的max_pages: 10参数强制只读前 10 页。这个参数在~/.openclaw/config/skills.yaml中设置。端口连通性验证OpenClaw 的 TUI 本质是 WebSocket 客户端。你可以用curl直接测试网关curl -X POST https://localhost:3000/api/v1/chat/completions \ -H Content-Type: application/json \ -d { model: moonshot-v1-32k, messages: [{role: user, content: 你好}] }如果返回{error:Unauthorized}说明网关已启动但未配置 API Key如果返回curl: (7) Failed to connect to localhost port 3000: Connection refused说明clawd进程根本没起来需查journalctl -u openclaw。4. 常见问题与独家排查技巧那些文档里不会写的“血泪经验”4.1 “openclaw: command not found” 的 7 种真实原因与逐级排查法这是安装后最高频的问题。别急着重装按以下顺序逐级排查90% 的情况能在 2 分钟内定位。Level 1: 检查 npm 全局安装路径npm prefix -g # 正常应输出类似 /usr/local 或 /opt/homebrew ls -la $(npm prefix -g)/bin/openclaw # 看文件是否存在且有执行权限如果ls报错No such file or directory说明npm install -g openclaw根本没成功。此时看安装脚本最后几行输出是否有npm ERR!。Level 2: 检查 PATH 是否包含该路径echo $PATH | tr : \n | grep -i npm\|openclaw # macOS/Linux $env:PATH -split ; | Select-String npm # Windows PowerShell如果没输出说明 PATH 没添加。手动添加macOS/Linuxecho export PATH$(npm prefix -g)/bin:$PATH ~/.zshrc source ~/.zshrcWindows[Environment]::SetEnvironmentVariable(Path, $env:Path ;$(npm prefix -g)\bin, Machine)Level 3: 检查 Node.js 版本兼容性node -v # 必须是 v22.x.x npm list -g openclaw # 必须显示 2026.4.0 版本如果node -v显示 v18.x说明安装脚本的 Node.js 安装失败但openclaw包却被旧版 npm 安装了。此时必须先sudo npm uninstall -g openclaw再手动安装 Node.js v22最后重装openclaw。Level 4: 检查 Shell 配置文件加载在新终端里执行echo $SHELL确认和你编辑的配置文件匹配。常见陷阱你改了~/.bashrc但实际用的是zsh所以source ~/.bashrc无效。你改了~/.zshrc但终端启动时加载的是~/.zprofile。此时需在~/.zprofile里添加source ~/.zshrc。Level 5: 检查文件系统挂载选项在某些 NAS 或企业文件服务器上/home目录可能是 NFS 挂载的。NFS 默认禁用noexec选项导致$(npm prefix -g)/bin/openclaw被视为不可执行文件。执行mount | grep $(npm prefix -g)如果输出包含noexec必须联系管理员重新挂载添加exec选项。Level 6: 检查 SELinux/AppArmor在 CentOS/RHEL 或 Ubuntu 上安全模块可能阻止执行。临时禁用测试sudo setenforce 0 # CentOS/RHEL sudo systemctl stop apparmor # Ubuntu openclaw --version # 如果此时成功说明是安全模块拦截永久方案是写 SELinux 策略但更简单的是将openclaw安装到/usr/local/bin/默认允许执行。Level 7: 检查符号链接损坏极少数情况下npm install -g创建的符号链接指向了不存在的文件。执行ls -la $(npm prefix -g)/bin/openclaw # 正常输出openclaw - ../lib/node_modules/openclaw/bin/openclaw.js # 如果显示openclaw - ../lib/node_modules/openclaw/bin/openclaw.js (broken) # 说明 ../lib/node_modules/openclaw/ 目录被删除了此时需sudo npm install -g openclaw重装。4.2 Gateway 连接失败的“隐形杀手”DNS 缓存与 TLS 证书链当openclaw gateway status显示unhealthy但curl测试网关 API 却成功问题往往出在 DNS 或 TLS。DNS 缓存污染OpenClaw 的网关组件使用 Node.js 的dns.lookup()它会读取系统/etc/resolv.conf但某些路由器如华硕 ASUSWRT会劫持 53 端口返回错误的 IP。验证方法# 获取 OpenClaw 实际解析的 IP node -e require(dns).lookup(api.moonshot.cn, (err, addr) console.log(addr)) # 用 dig 对比 dig api.moonshot.cn short如果两者 IP 不同说明 Node.js 被本地 DNS 劫持。解决方案在~/.openclaw/config/gateway.yaml中添加dns_servers: - 1.1.1.1 - 8.8.8.8TLS 证书链不完整企业内网常部署中间 CA但 Node.js v22 默认不信任自建 CA。错误现象gateway.log中出现Error: unable to verify the first certificate。解决方案# 将企业 CA 证书追加到 Node.js 信任库 sudo cp /path/to/your-ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates # 或者设置环境变量临时 export NODE_EXTRA_CA_CERTS/path/to/your-ca.crt4.3 TUI 无法输入中文的终极解决方案在 Windows PowerShell 或某些 Linux 终端里TUI 输入中文会变成乱码或无响应。这不是 OpenClaw 的 bug而是终端编码与 Node.js 的readline模块不兼容。Windows PowerShell 方案# 在启动 TUI 前执行 $OutputEncoding [System.Text.Encoding]::UTF8 [Console]::InputEncoding [System.Text.Encoding]::UTF8 openclaw tuiLinux/macOS 终端方案确保终端的 locale 是 UTF-8locale # 输出应包含 LANGzh_CN.UTF-8 或 en_US.UTF-8 # 如果不是执行 export LANGen_US.UTF-8 export LC_ALLen_US.UTF-8 openclaw tui终极方案跨平台编辑~/.openclaw/config/tui.yaml添加input_encoding: utf8 terminal_type: xterm-256color # 强制指定终端类型4.4 技能Skill加载失败的“幽灵依赖”有时openclaw skill list显示某个 Skill 是loading状态但永远不变成loaded。查看app.log可能只有一行[INFO] Loading skill: notion-skill然后就没了。这通常是因为该 Skill 依赖的外部库如notion-client在安装时被 npm 的peerDependency机制跳过了。诊断命令cd ~/.openclaw/node_modules/notion-skill npm ls notion-client # 如果显示 empty, 说明依赖缺失修复步骤# 进入 Skill 目录 cd ~/.openclaw/node_modules/notion-skill # 手动安装 peer 依赖 npm install notion-client^2.2.0 # 重启 Skill openclaw skill restart notion-skill实操心得我在某律所部署时legal-doc-skill总是加载失败。查日志发现它依赖pdf-lib1.17.1但全局安装的pdf-lib是2.0.0版本不兼容。解决方案不是降级全局包而是在legal-doc-skill目录里执行npm install pdf-lib1.17.1 --no-save让 Skill 拥有自己独立的、版本锁定的依赖副本。OpenClaw 的 Skill 加载器会优先使用node_modules下的本地依赖而不是全局的。5. 生产环境加固与长期维护从“能用”到“稳用”的必经之路5.1 内存与 CPU 限制为什么必须用 systemd 的 MemoryMaxOpenClaw 的默认配置对资源“很贪婪”。在 4GB 内存的机器上clawd进程可能占用 3.2GB导致系统 Swap 频繁响应迟钝。这不是内存泄漏而是 V8 引擎的垃圾回收策略——它倾向于保留内存避免频繁分配。正确做法用 systemd 服务配置硬性限制。编辑/etc/systemd/system/openclaw.service[Service] # ... 其他原有配置 MemoryMax2G CPUQuota75% RestartSec10然后执行sudo systemctl daemon-reload sudo systemctl restart openclawMemoryMax2G会触发 Linux 的 cgroup 内存控制器当clawd进程 RSS 内存超过 2GB 时内核会强制其进行 GC而不是让它无限增长。CPUQuota75%限制其最多使用 0.75 个 CPU 核心防止它吃光所有 CPU 时间片影响其他服务如 MySQL。注意不要用ulimit -v或--memory参数因为 OpenClaw 的主进程是node它会 fork 出多个子进程如ffmpeg处理音视频ulimit无法跨进程继承。只有 systemd 的 cgroup 机制能真正约束整个进程树。5.2 日志轮转与磁盘空间守护避免 /var/log 被撑爆OpenClaw 的审计日志/var/log/openclaw/audit/默认按小时切片但如果不配置轮转一年下来可能产生数 TB 日志。logrotate是标准解决方案但 OpenClaw 提供了更精细的控制。创建/etc/logrotate.d/openclaw/var/log/openclaw/audit/**/*.log { daily missingok rotate 30 compress delaycompress notifempty create 644 root root sharedscripts postrotate systemctl kill -s USR1 openclaw endscript }关键点在于postrotate中的systemctl kill -s USR1 openclaw。OpenClaw 的clawd进程监听USR1