在 Mac mini M4 无头网关上跑 OpenClaw,最常见的「无聊故障」是:launchd 在开机瞬间触发,而网关尚未完成端口绑定;夜间清理脚本删临时文件时,Agent 作业仍持有句柄;或网关进程存活但小版本升级后内部计时器不再唤醒——2026 年社区案例里这类报告反复出现。本文给出一套对齐模型:把网关就绪作为侧车任务的前置条件;在 macOS 上优先用 launchd 管外围排程,而不是随手 crontab;用健康探针验证你真正依赖的行为,而不是只看 PID。另附就绪矩阵、八步落地、日志要点与 FAQ 结构化数据,便于收录与值班检索。
工具权限与目录沙箱见 OpenClaw 工具白名单与文件系统沙箱;日志轮转与脱敏见 网关日志策略;密钥与 Keychain 见 环境变量与钥匙串;出站、公司代理与 TLS 白名单见 实操矩阵(2026-04-09)。若调度器与 CI Runner 同机,请先读 并发与公平性 再加重型 cron 窗口。定价 dingjia,帮助 bangzhu。
为何网关周边优先 launchd
cron 跨平台友好,但对 macOS 的电源断言、GUI 会话与统一日志几乎无感。launchd plist 可设 ThrottleInterval、把 stdout/stderr 指到可轮转文件,并用 StartCalendarInterval 表达日历触发而少踩 crontab 时区坑。专用 Unix 用户的无头网关通常把用户级 Agent 放在 ~/Library/LaunchAgents,并用当前 macOS 推荐的 launchctl bootstrap 流程加载——务必把精确命令写进 runbook,重装系统才可复制粘贴。
OpenClaw 产品内文档越来越多地描述一等公民的进程内定时器(含类 cron 语义);把它与 launchd 的进程外维护区分开:后者负责网关重启、健康检查、备份等在「网关短暂离线」时仍应可控的工作。两层并存清晰可接受;混为一谈就会在事故中失去可观测性——你分不清是产品调度停了还是 plist 没加载。
就绪矩阵:何时允许跑侧车任务
| 侧车任务 | 最低就绪信号 | 说明 |
|---|---|---|
| 工作区 tar 备份 | 网关健康 + 无活动工具租约(或静止标志) | 避免写入中途归档损坏 |
| 日志压缩/上传 | 网关在线;仅追加打开日志 | 与 轮转策略 同审 |
| 依赖预取 | CPU 负载低于软上限 60% | 与 CI 同机时不要抢峰 |
| 配置漂移检测 | 只读探针任意时刻 | 仅告警;避免与在线配置并发写 |
启动错峰与探针草图
重启后的顺序很重要。实用默认:(1) 网络可用;(2) 网关 LaunchAgent RunAtLoad 拉起;(3) 等待 30~60 秒 或直到 loopback 健康 URL 返回 200 且带版本字段;(4) 再启用会碰工作区数据的日历任务。把等待写进 launchd 调用的薄包装脚本,而不是隐式塞进 OpenClaw——产品升级时包装层更稳定。
# 示例模式(请替换端口与路径): # /usr/bin/curl -fsS --max-time 5 http://127.0.0.1:<port>/health || exit 1 # exec /path/to/backup-openclaw-workspace.sh
探针应反映真实依赖:若工作流要出站 DNS 或公司代理,健康检查可轻量覆盖这些路径——但勿把密钥写进 URL。探针失败时进程应以非零退出,让 launchd 与 Console 出现 error 轨迹,而不是静默生成空备份。
八步落地清单
- 盘点排程:列出 OpenClaw 内建定时器与 macOS 侧作业,消掉无名重复。
- 包装脚本:每个副作用一个入口,
set -euo pipefail,结构化日志行。 - 一任务一 plist:重启、备份、漂移检测分文件——事故时可单独卸载。
- 环境变量:显式注入
PATH、区域与配置文件路径——勿假设登录 shell。 - 节流:设
ThrottleInterval防止崩溃循环打爆 API。 - 日历错峰:备份与日志轮转不要在同一秒启动。
- 监控:日备任务若成功时间戳老于 26 小时 即告警。
- 升级彩排:每次网关升级后做一次 dry-run 备份,对照清单校验与前版本一致。
职责与值班:谁拥有「外层排程」?
「网关团队」与「macOS 平台团队」边界不清时,launchd 任务最容易无声腐烂。把每个 plist 路径、加载命令与健康检查 URL 放进同一 Git 仓库,并用 CODEOWNERS 指向与网关宕机同责的 on-call 组。若有人拿着已不存在的 crontab 字符串开防火墙工单,说明文档漂移已赢——按流程缺陷处理,而非随手改一行。每季度要求值班按 runbook 步骤卸载再加载每个 LaunchAgent,禁止凭肌肉记忆操作,并把 stdout 附在工单里,让下一位工程师继承证据而非口耳相传。
若多区域多网关,请在 plist 标签前缀带上环境与区域(例如 com.example.openclaw.prod.hk.backup),避免复制粘贴把备份指到错误工作区。命名纪律需与文件系统沙箱同用:即便标签写错,也不应静默越权 subtree——日志里应有响亮的拒绝记录。
运维反模式
固定钟点跑破坏性清理却不看活跃会话;网关 Unix 用户与交互开发者共用;launchd stdout 灌进永不轮转的单文件直至磁盘满;「Linux 团队用 cron」就在 macOS 上照搬而无视 App Nap;升级后跳过健康检查——这些会酿成「调度静默停止」类问题,排查动辄数日。请与 工作区备份与迁移 联读,确保恢复是练过的而非纸面。
在可丢弃主机上验证 plist 与探针成本更低。NodeMac 在香港、日本、韩国、新加坡与美国提供带 SSH/VNC 的专用 Mac mini M4,可复制整套 LaunchAgent、做重启循环演练,再触碰生产网关。按需付费比占用共享构建机做实验更省组织协调成本。
若你已按本文把「网关就绪 → 侧车任务」写成脚本与监控,下一步通常是把同一探针挂到值班手册的升级检查单上,并在季度演练里强制跑一次「备份失败」告警,确认 on-call 能在十五分钟内定位是探针、权限还是磁盘——而不是先怀疑模型推理质量。把演练记录进变更系统,比多写一篇内部 wiki 更能降低复发率。