租賃雲 Mac 上的 openclaw doctor、重複 LaunchAgents 與網關恢復(2026)
2026 年上游 OpenClaw 在 macOS 上可能註冊不止一個帶相似標籤的 launchd 作業——尤其在團隊混用桌面應用路徑與CLI 網關安裝時。在 港/日/韓/新/美 的 7×24 租賃 Apple Silicon 雲 Mac 上,這會表現為面板抖動、修改 ~/.openclaw/openclaw.json 後行為仍“像舊的”、或 18789 端口被陳舊二進制佔用。openclaw doctor 是官方推薦的第一步排障;本文把 doctor 輸出整理成可重複的收斂手冊。升級後請配合 升級與回滾、與 網關故障排查、以及 launchd 環境變量與 API 密鑰 一起使用。
哪些症狀像“重複服務”
openclaw gateway status與launchctl list不一致。- 編輯
~/.openclaw/openclaw.json後運行時行為不變。 ~/Library/LaunchAgents/下有兩個 plist,ProgramArguments指向不同 OpenClaw 路徑。
~/.openclaw 放在 iCloud Drive / Dropbox —— 文件鎖會破壞代理狀態;請放在租賃機本地 NVMe。
重複 LaunchAgent 的根因
重複很少“隨機出現”,通常來自安裝路徑隨時間變化。長租裸金屬上常見序列:
- 升級未卸載:npm
-g升級後,舊 app bundle 仍註冊網關 plist。 - 多賬戶試驗:
admin與builder各留一份 LaunchAgent。 - 自動化重複執行:Ansible/腳本每次運行都追加 plist,而非冪等聲明。
- 手工複製:按網文把 plist 丟進
LaunchAgents卻未 unload 舊 Label。
| 信號 | 可能的重複模式 | 忽視的風險 |
|---|---|---|
| 18789 端口 PID 來回變 | 兩個網關在啟動時爭搶 | Webhook 失敗;配置寫到一半 |
CPU 空閒但 launchctl list 有兩個 OpenClaw 標籤 |
一個代理崩潰,另一個未清理 | 與預期 openclaw.json 靜默漂移 |
~/.openclaw/logs 體積暴漲 |
雙代理都在 debug 記日誌 |
512 GB 盤片壓力 |
把「每台主機只允許一種權威安裝來源」寫進內部 SLO:自助腳本與人工排障若在 港/日/韓 多時區交接中交替執行 gateway install,很容易在凌晨把第二份 plist 悄悄加回。維護窗口內凍結變更,並在工單範本裡強制附上最近一次 doctor 全文與時間戳。
ProgramArguments 是否仍指向預期二進位檔。若與 磁碟套餐 擴容同步進行,請單獨記錄一次基線 doctor,避免把磁碟遷移誤判為網關故障。
以 openclaw doctor 為基線
openclaw doctor
將標準輸出寫入 CI 日誌或工單。doctor 通常會標出路徑、版本偏差、launchd 註冊問題——生產代理機上警告應視為阻斷項。
在任意 gateway install 或大版本升級前後各跑一次 doctor:對比兩次輸出可知 launchd 是否真正收斂。建議把文本存到日期目錄(如 ~/ops/openclaw/2026-04-09-pre.txt),便於在數月 7×24 運行中做迴歸比對。
若 doctor 提示陌生修復參數,請在工單中固定 OpenClaw 版本號並對照上游發行說明——雲 Mac 往往比筆記本慢一個版本,利於復現也可能因語義變化踩坑。
檢查 LaunchAgents
ls -la ~/Library/LaunchAgents/ | grep -i openclaw
逐個打開 plist,記錄 Label、ProgramArguments、EnvironmentVariables。若同時存在 ai.openclaw.gateway 與 ai.openclaw.mac 風格標籤,需選定本機唯一安裝模式(原生 npm 或 app bundle)。
留意 WorkingDirectory 與注入的 PATH:重複實例常只差 Node 路徑(/usr/local/bin vs ~/.nvm/versions/...),就足以分叉運行時。請在運維手冊用三列表格記錄差異,避免下一輪值班又把第二份 plist 加回來。
收斂順序(儘量縮短中斷)
- 若有外部自動化依賴該網關,先公告維護;
bootout期間監聽中斷常見 30–120 秒。 - 對每個非權威 Label 執行
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/<duplicate>.plist(若使用不同 bootstrap 域請相應調整)。 - 用
launchctl print gui/$(id -u)/<label>確認僅剩預期作業。 - 將退役 plist 移到
~/Archive/LaunchAgents-2026-04-09/而非直接刪除,便於回滾比對。 - 對選定模式只執行一次
openclaw gateway install(或 doctor 建議的修復);避免同一分鐘內重複跑安裝腳本。 - 如需則
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/<canonical>.plist,再反覆運行 doctor 直至乾淨。
驗證網關健康
lsof -nP -iTCP:18789 | grep LISTEN—— 應只有一個 PID 監聽。openclaw gateway status—— 與上次綠髮布的基線輸出對比。openclaw logs --follow(採樣 200 行)——對照 安裝指南 基線。- 若暴露健康檢查路由,可從 日本或美國 另一臺 MacXCode 節點探測,確認跨區域可達性與防火牆策略一致。
網絡、防火牆與 18789 端口
租賃雲 Mac 可能位於提供商 ACL 或你們安全組之後。必須為需要訪問的子網顯式放行 OpenClaw 網關監聽的 TCP 18789——無論是 韓國 的 CI、運維筆記本,還是反向代理 VM。
若在網關前用 nginx/Caddy 終結 TLS,請記錄鏈路跳數:X-Forwarded-* 不匹配會讓健康檢查打到錯誤上游,看起來像“重複網關”。在 內部幫助頁 維護唯一的「公網 URL → 後端端口」說明,並在主機 ~/ops/README.txt 鏡像一份。
nc -vz host 18789,安靜內網路徑應在 < 5 ms 級完成;若數秒級,多半是過濾或不對稱路由,而非 OpenClaw 本身。
決策矩陣:一機一模式
| 目標 | 優先 | 避免 |
|---|---|---|
| 可腳本化 CI 運維 | npm/CLI 網關 + 單一 LaunchAgent | App 與 CLI 同時管網關 |
| 以 GUI 試驗為主 | 官方 app 路徑;關閉 CLI 重複項 | 並行多套網關安裝 |
| Docker 隔離 | 僅在 Compose 內跑網關;宿主機不重複 | 宿主機 LaunchAgent 與容器同綁 18789 |
裸金屬 Mac mini M4 為何更省事
排查重複 LaunchAgent 是強狀態工作:讀 plist、對比環境、循環重啟守護進程直到 doctor 乾淨。Mac mini M4 配本地 NVMe 可減少超賣虛擬機的快照/重啟歧義,launchd 語義與桌面機一致。MacXCode 在香港、日本、韓國、新加坡、美國 提供節點,可把網關放在靠近 API 消費者或合規邊界的位置,同時保留 SSH 自動化與偶發 VNC 圖形驗證。
租用也便於低成本跑金絲雀主機:從生產克隆 plist 策略,先在新版本驗證再推廣。容量不足時在 定價頁 擴容磁盤或加第二臺節點,而無需提前數週採購機器。
結語:把 openclaw doctor 當作權威提示,再機械地去重 LaunchAgent 並複檢監聽。穩定裸金屬讓這套演練成本很低——詳見 套餐 與 幫助。