在 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 更能降低復發率。