在交互式终端里启动 OpenClaw 可以工作,直到 SSH 断开或笔记本休眠——你的「7×24 数字员工」就不再响应 Webhook。本文说明如何在远程 Mac mini M4 上用 launchd 托管 OpenClaw:在 LaunchAgent 与 LaunchDaemon 之间选型、为 Node 崩溃设置合理的 ThrottleInterval、轮转日志避免撑满 SSD,以及在 macOS 安全更新后恢复服务。你将看到 plist 字段对照表、八步上线流程、与 xxxMac 工单中常见的数值门槛(文件描述符、重启频率、TLS 握手耗时)。
crontab 继承的环境极简——没有 NVM/PNPM shim、没有图形会话做视觉自动化,也没有崩溃退避。launchd 提供 KeepAlive、节流与结构化日志,这些是 cron 无法替代的。
请与侧重功能的 OpenClaw v2026.3 部署与 ContextEngine 排错教程 搭配阅读;在把 API Key 写进 plist 之前,先看 M4 上的密钥管理指南。需要点击 TCC 授权时,用 Web VNC;日常自动化走 SSH 与 帮助中心 即可。
先选会话模型:LaunchAgent 还是 LaunchDaemon
OpenClaw 在生产里分两类:从不碰像素的无头 API Worker,以及要驱动 Safari/Xcode 的视觉 Agent。会话类型决定 plist 目录与 WindowServer 权限是否生效。
| 部署形态 | plist 路径 | 最适合 | 注意 |
|---|---|---|---|
| LaunchAgent(按用户) | ~/Library/LaunchAgents |
视觉自动化、剪贴板、截屏 | 重启后需登录一次;谨慎使用自动登录。 |
| LaunchDaemon(系统) | /Library/LaunchDaemons |
纯 REST Worker、队列消费者 | 无 GUI;面向 UI 的 TCC 会静默失败。 |
plist 关键字段:不要靠猜
- Label:反向 DNS,如
com.yourorg.openclaw.worker,单机唯一。 - ProgramArguments:Node 22 绝对路径 + 入口脚本(避免相对
npm)。 - EnvironmentVariables:内联
NODE_OPTIONS=--max-old-space-size=8192以吃满 M4 统一内存。 - KeepAlive:字典形式设
SuccessfulExit = false仅在异常退出时重启。 - ThrottleInterval:重启间隔秒数;调试期先用 10,稳定后再收至 2。
- StandardOutPath / StandardErrorPath:指向
/usr/local/var/log/openclaw/(目录权限 0750)。 - SoftResourceLimits / NumberOfFiles:在大量 WebSocket 前抬到 65536。
- WorkingDirectory:设为 Git 检出目录,保证相对配置路径一致。
从空白 plist 到可监控 Worker 的八步
- 服务账户:创建非管理员
openclaw用户,独立钥匙串承载 API Token。 - 安装 Node 22 LTS:用
fnm/nvm固定版本,并 symlink 到/usr/local/bin/node供 plist 引用。 - 导出环境:在能手动跑通 OpenClaw 的同一 shell 执行
env > /tmp/openclaw.env,再挑选键写入 plist。 - 编写 plist:放入 Agents 或 Daemons 目录;加载前
plutil -lint。 - 加载:macOS 13+ 使用
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.yourorg.openclaw.plist。 - 验收:
launchctl print gui/$(id -u)/com.yourorg.openclaw应显示state = running。 - 日志轮转:配置
newsyslog或凌晨单独 LaunchAgent 截断超大 stderr。 - 告警:若 10 分钟内重启超过 5 次,立即外呼值班。
故障签名矩阵:日志含义与第一条命令
| 现象 | 可能原因 | 首选动作 | 记录指标 |
|---|---|---|---|
launchd 报 spawn failed |
解释器路径错误或无可执行权限 | ls -l 检查 ProgramArguments[0];重装 Node |
退出码 78 |
| 快速反复重启 | 未捕获的 Promise 拒绝 | ThrottleInterval 提到 30 并挂调试器 | 每分钟重启 > 3 |
| 进程存活但不消费任务 | DNS 或上游 API 被防火墙拦截 | curl -I 探测;检查出站策略 |
TLS 握手 > 1200 ms |
| WindowServer 卡死 | 并发视觉 Agent 过多 | 拆分到第二台 xxxMac 节点 | 活动监视器 Idle wakeups > 4000/s |
与同一台机器上的 Xcode CI 共存
许多客户在同一台 Mac mini M4 上同时跑 OpenClaw 与夜间 xcodebuild 归档。请把重编译窗口与 Agent 高峰错峰:可用 cpulimit 或 nice 限制 OpenClaw 在归档期的 CPU;日志分文件避免排障时噪音过大。若合并负载下载体温度高于 85 °C,应把视觉 Agent 迁到第二节点而非硬挤单机。
常见问题
OpenClaw 应该用 LaunchAgent 还是 LaunchDaemon?
需要屏幕自动化时用专用用户的 LaunchAgent;纯无头 API Worker 才用 LaunchDaemon。
崩溃中的 Node Worker ThrottleInterval 设多少?
先用 10 秒 防止打爆重启环,日志稳定 24 小时后再降到约 2 秒。
每次 macOS 安全更新都要卸载服务吗?
建议在重启前 launchctl bootout,重启后再 bootstrap,避免重复 Job。
Apple Silicon M4 将 CPU、GPU 与 Neural Engine 统一在高效封装内,是 macOS 原生自动化的理想载体。通过 xxxMac,你在 1 Gbps 独享带宽 上使用这颗芯片,并可在新加坡、日本(东京)、美国西部之间按延迟选址;开通仍在约 5 分钟 量级,适合反复试错 plist。相比自购硬件,租用省去折旧、机房与散热成本,又能保持真正的 macOS 与 Gatekeeper 一致体验。服务稳定后,可在 控制台 扩容节点,或在 定价页 匹配套餐规格。
拉起一台干净 M4 实验节点
在隔离硬件上验证 plist,再推广到生产 Agent。