2026年 OpenClaw 定時任務與排程在 macOS 無頭遠端 Mac 上不執行或逾時?Gateway 生命週期、環境變數與 launchd 對照的可復現排錯清單 + FAQ
「排程寫好了」卻在無頭或SSH 維運帳戶下不觸發、延遲或一直逾時,多半不是單一 bug,而是誰在跑 Gateway、環境變數從哪裡注入、以及launchd 工作階段與互動式 shell 不一致。本文給一組可依序勾選的對照表,並銜接閘道暴露與長連線場景的延伸閱讀。
1. 先把現象說清楚:不執行 vs 逾時
完全不執行:到了排程時間沒有日誌、沒有副作用——優先懷疑排程器所依附的行程不存在(Gateway 未起、使用者 GUI 工作階段登出、plist 未載入)。逾時:有觸發但請求卡住或中斷——優先懷疑下游(模型/工具 API)、閘道或反向代理的逾時階層、以及無頭環境下的資源爭用(CPU、記憶體壓力、同機多 Job)。若你的節點同時跑 CI 與 Agent,可對照 2026年 Jenkins SSH 建置代理 vs GitHub Actions 自託管 macOS Runner:獨享遠端 Mac 上的並發、SSH 工作階段穩定度與 TCO 決策矩陣 + FAQ 中的連線與並發語意。
2. Gateway 生命週期:誰拉起、何時消失
OpenClaw 的排程與對外能力,通常依賴長駐的 Gateway/相關行程。在無頭 Mac 上常見落差包括:
- 你以 SSH 手動
openclaw …起服務,關掉 SSH 後子行程被一併終止(除非已用nohup、disown或交給 launchd)。 - LaunchAgent 以登入使用者載入;若機器重開後沒有人登入過該使用者,或你只透過另一帳戶 SSH,可能出現「我以為常駐、其實沒載入」。
- 兩組閘道或兩份 plist 競爭同一埠/同一設定檔,導致隨機重啟或排程指向錯誤實例。
Runbook 建議固定記錄:監聽埠、行程樹(誰是父行程)、以及重啟後驗證指令(例如 launchctl list | grep -i openclaw、對應埠的 lsof)。若你需要對外可連但不想公網開洞,可先對照 2026年 OpenClaw 閘道零暴露部署:Tailscale Serve/Funnel 與 Cloudflare Tunnel(cloudflared)對比+遠端 Mac SSH 可復現步驟與 FAQ 的連線模型,再回頭調排程與逾時。
3. 環境變數真源:OPENCLAW_* 到底誰看得到
互動式 shell 裡 export 的變數,不會自動出現在 launchd 管理的子行程。常見落差:
| 載入情境 | 典型現象 | 建議處置 |
|---|---|---|
只在 ~/.zshrc |
SSH 手動跑正常,排程/launchd 失敗 | 在 plist 的 EnvironmentVariables 或專用 env 檔對齊真源 |
| 多份設定重複定義 | 偶發連到錯誤上游或金鑰 | 註銷冗餘來源,保留單一路徑並版本控管 |
| 路徑/Node/CLI 版本 | 排程找到舊二進位 | plist 內寫絕對路徑的 ProgramArguments,避免依賴 PATH |
大版本升級後變數與外掛路徑變更時,請交叉比對 openclaw doctor 輸出與文件中的 OPENCLAW_* 對照表。
4. launchd 對照:與「SSH 裡跑一下」不是同一回事
把排程或閘道交給 launchd,是無頭 Mac 上最可復現的做法之一。排查時請對齊:
- 網域:
gui/UID使用者 Agent 與系統層 Daemon 的差異;改 plist 後需bootout/bootstrap(依 macOS 版本語法)讓設定生效。 - KeepAlive:崩潰後是否自動拉起;若無限重啟,先查
StandardOutPath/StandardErrorPath是否可寫。 - ThrottleInterval:過短可能造成重啟風暴;過長則像「排程延遲」。
- WorkingDirectory:相對路徑設定檔是否讀錯。
若同一台機器上還有第二個 OpenClaw 相關 Agent,請與團隊約定 Label、埠與日誌目錄,避免「以為在排 A、實際跑到 B」。
5. 逾時:分層對齊
端到端逾時往往由多層組成,請由下往上量:
- 工具或外掛單次呼叫上限(本機程序、腳本)。
- OpenClaw/Gateway 對外請求的逾時設定。
- 反向代理、隧道(cloudflared、Serve 等)的閒置與總時間上限。
- 若後端是本地推論,記憶體壓力導致的極端延遲有時表現為逾時而非 OOM 日誌。
每一層只調一個變數,並在 Runbook 記錄「變更前/後」與觀測指令,避免無法復現的調參。
6. 可復現排錯清單(建議照順序勾選)
| 步驟 | 檢查 | 預期/備註 |
|---|---|---|
| A | Gateway 監聽與行程是否存在 | lsof/launchctl list 與文件埠一致 |
| B | 排程觸發時的父行程與使用者身分 | 與 plist/SSH 帳戶一致 |
| C | OPENCLAW_* 與金鑰路徑 |
在實際執行環境印出(脫敏)比對 |
| D | 日誌與逾時欄位 | 鎖定是第一層還是多層疊加 |
| E | 重啟後自動恢復 | 冷啟動腳本或登入項目是否完整 |
7. FAQ
問:為什麼我 SSH 進去手動測試都正常,排程就是不跑?
答:手動測試繼承互動式 shell 的環境;排程或 launchd 子行程沒有同一份環境。請以實際執行身分驗證變數與路徑。
問:無頭機器重開後一切正常,過一陣子又停?
答:查記憶體壓力、閘道崩潰循環、或外部隧道斷線。搭配 KeepAlive 與日誌捲動策略,避免靜默失敗。
問:可以把排程完全交給 cron 嗎?
答:可以,但 cron 的環境更精簡,與 launchd 管理 OpenClaw 行程混用時,務必寫清誰負責重啟與誰負責觸發,避免雙重啟或競爭。
問:逾時調大就解決了,這樣安全嗎?
答:先確認下遊真的需要更長時間,否則只是把失敗變慢;同時檢查是否應改為非同步任務或分段重試。
在 Mac mini 上固化「無頭排程」最省事
定時任務、閘道與 launchd 這條鏈路,最吃重的是長期穩定、可預期的重啟與低待機功耗。Mac mini 搭載 Apple Silicon,常在相同功耗預算內提供更高算力與記憶體頻寬,適合當 24×7 邊緣節點;macOS 與 launchd 的運維語彙在團隊內也較一致。原生 Unix 工具鏈讓 SSH、腳本與健康檢查維持單一路徑,Gatekeeper、SIP、FileVault 也讓常開主機的基線強化比多數消費級平台單純。
若你希望把本文的清單跑在安靜、可靠、長開不吵的硬體上,Mac mini M4 仍是極具性價比的切入點——現在即可從首頁了解方案,讓排程與 Gateway 真的常駐、可復現。
若你希望從首頁直接對照租賃或方案,可 前往 SSHMac 首頁查看 Mac mini 相關方案。