AI Frontier

2026 在 macOS 與雲 Mac 上調度 OpenClaw:LaunchAgent、cron 與網關重啟陷阱

MacHTML Lab2026.03.27 約 12 分鐘閱讀

在 macOS 上落地 OpenClaw 的團隊常遇到同一類問題:網關在終端裡跑得好好的,一旦加上定時刷新、webhook 重試,或運維執行 gateway restart,agent 就悄悄停了。根因往往不在「多寫幾行 crontab」,而是沒有按蘋果推薦的方式配置 LaunchAgent、標準輸出日誌與進程邊界。租一臺可 SSH 的雲 Mac mini 做預發,能以按天計的成本反覆改 plist,又不必讓筆記本每二十分鐘睡眠打斷後臺任務。

OpenClaw 用 LaunchAgent 還是 cron

macOS 仍帶 crontab,但官方調度核心是 launchd。以登錄用戶加載的 LaunchAgent 能繼承圖形會話相關的環境變量,對依賴 HOME、SSH agent socket 或 ~/.config 下配置的 OpenClaw 更友好。cron 環境極簡,常見故障是「終端裡一切正常,每到第 12 分鐘就失敗」,排障會議一開就是三刻鐘

夜間審計、緩存預熱、令牌輪換等重複任務,請用 ~/Library/LaunchAgents/ 下的 plist,配合 StartCalendarIntervalStartInterval。Ventura 及以後推薦 launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.openclaw.health.plist 加載;老文檔裡的 launchctl load 仍有人用,但新資料更強調 bootstrap 語義。

若你通過 npm 或 Docker 部署 OpenClaw,調度層不變:plist 只負責調用包裝腳本,再由腳本指向正確二進位。安裝路徑與升級節奏可先讀 OpenClaw npm 與 Docker 部署對比,再寫死到 plist 裡,避免日後升級 Node 時 silent break。

plist 裡真正影響穩定性的鍵

三類鍵決定「能演示」與「能長期跑」的差別:

  • StandardOutPath / StandardErrorPath — 不設就等於盲飛。建議寫到 ~/Library/Logs/OpenClaw/,按周輪轉或限制單文件 50 MB,防止佔滿啟動盤。
  • RunAtLoad — 登錄即拉起;與 KeepAlive 聯用可自動重啟,但過於激進會在壞配置下形成崩潰循環,試驗階段給 ThrottleInterval 至少 10 秒
  • EnvironmentVariables — 顯式寫 NODE_ENVPATH(Apple Silicon 別忘了 /opt/homebrew/bin)以及 OpenClaw 配置目錄覆蓋項。指望「繼承終端環境」在 launchd 下不可靠。

包裝腳本需 shebang 且 chmod +x。launchd 不會像某些 cron 配置那樣替你猜默認 shell。

排障時可 launchctl kickstart -k gui/$(id -u)/com.example.openclaw.health 強制重啟,再 tail StandardError;配合 log show --predicate 'process == \"launchd\"' --last 15m 看退出原因——代碼 78 多表示配置錯誤,高頻重啟多半缺依賴。

共享雲主機上勿把生產 API 令牌明文寫進全局可讀 plist;若外包人員曾登錄,合併後應輪換密鑰。更穩妥是由密鑰系統在啟動時注入短期令牌,或為敏感任務單獨建 macOS 用戶與獨立 LaunchAgents 目錄。

網關重啟與依賴任務

發布時執行 gateway restart,若包裝腳本裡寫 pkill -f openclaw 這類寬匹配,可能把健康檢查或其他 LaunchAgent 拉起的子進程一併幹掉。應縮小信號範圍,或優先使用官方 CLI 提供的停啟鉤子。運維手冊建議固定三步:排空 webhook、重啟網關、用 launchctl print gui/$(id -u)/com.example.openclaw.gateway 核對上次退出碼。

兩個 cron/LaunchAgent 若在同一分鐘調用 npm exec 搶同一埠,失敗者往往無聲退出。把計劃錯開 120 秒,或用 /tmp 下的鎖文件加 flock 串行化。

系統小版本升級後記得重新 launchctl print 關鍵 label:蘋果偶爾會收緊默認資源上限,原本 256 個文件描述符夠用的網關,升級後可能要在包裝腳本裡先 ulimit -n 1024 再啟動 Node。

對外暴露——迴環綁定、反向代理、隧道——請參考 OpenClaw 網關、代理與隧道加固,避免調度器在錯誤網絡面上反覆重啟。

為什麼雲 Mac 勝過常睡眠的筆記本

筆記本會睡眠、VPN 會閃斷,電源策略還會暫停後臺任務。數據中心裡的 Mac mini M4 可長期在線,出口 IP 穩定便於加白名單,需要點 macOS 隱私彈窗時還能開 VNC。按日租金大約 17–25 美元 的短峰,比為峰值單獨採購硬體更靈活。

先把 SSH、屏幕共享與帳號首次登錄流程按 遠程 Mac 配置指南 跑通,再批量加載 LaunchAgent;否則容易出現 plist 以錯誤用戶運行、找不到密鑰鏈條目等問題。

監控可另起一個 LaunchAgent,每 5 分鐘 用十幾行 curl 打網關健康檢查,連續三次延遲超過 800 毫秒 再告警,能在用戶感知 webhook 延遲前發現 Node 事件循環卡死。

跨時區團隊要在 plist 裡寫清 StartCalendarInterval 的 Hour/Minute 對應機器本地時區,並在 runbook 寫明 UTC 偏移;否則「午夜任務」可能在錯誤自然日觸發,和按日滾動的冪等鍵衝突,造成重複投遞。

使用 nvm 時 plist 內請寫 Node 絕對路徑,如 /Users/builder/.nvm/versions/node/v22.14.0/bin/node,因為非交互 launchd 不會 source .zshrc。README 裡鎖定 Node 版本,升級時同事才記得同步改 plist。

日誌與 webhook 載荷若未輪轉,聊天型 bot 一個月可能漲 2–4 GB。可每周用 LaunchAgent 刪除 ~/Library/Logs/OpenClaw/archive/ 裡超過 14 天 的 gzip,或接入集中日誌滿足合規留存。

快速決策表

需求推薦注意
用戶會話、鑰匙串、GUI 令牌LaunchAgent登錄項順序、FileVault 解鎖時機
綁定特權埠(<1024)LaunchDaemon + 權限收斂與用戶 LaunchAgent 混用要謹慎
一次性每小時腳本cron 或 atPATH 與時區陷阱
網關崩潰自恢復LaunchAgent + ThrottleInterval壞發布導致重啟風暴

常見問題

OpenClaw 在 macOS 上應用 cron 還是 LaunchAgent?

用戶態常駐任務優先 LaunchAgent:launchd 對崩潰重啟、環境變量繼承與日誌比現代 macOS 上的 cron 更可預期。臨時試驗或已有 crontab 的老腳本可繼續用 cron。

為什麼 gateway restart 會讓 agent 掉線?

重啟網關時若包裝腳本使用過於寬泛的 pkill,或與子進程共享同一進程組,可能一併結束健康檢查等 LaunchAgent 任務。應拆分 plist 標籤、寫清日誌,並避免只按進程名全局殺進程。

7×24 節點要預留多少內存?

在 Node 堆之外至少預留 4 GB 應對 30 秒內多次 webhook 尖峰。16 GB 的 Apple Silicon Mac mini 適合預發;生產網關常見做法是獨立機器。

可靠的 agent 需要可靠的主機。Apple Silicon Mac mini 租賃提供原生 macOS 調度、穩定供電與 SSH/VNC,無需再為峰值單獨買臺式機。當 OpenClaw 網關要在夜間任務與 webhook 突發中保持溫熱,把負載放到雲端節點、把筆記本留給寫代碼,並按發布節奏彈性增減租用天數,是 2026 年更現實的運維路徑。

讓 OpenClaw 在真 macOS 上持續在線

租用雲 Mac mini,7×24 運行 LaunchAgent、預發網關與 Safari 相關工作流。先選區域,再完成 SSH 加固後加載 plist。

雲 Mac 跑 OpenClaw
低至 $16.9/天