AI / 自動化 2026年4月9日

租賃雲 Mac 上的 openclaw doctor、重複 LaunchAgents 與網關恢復(2026)

MacXCode 技術團隊 · 約 18 分鐘閱讀

2026 年上游 OpenClaw 在 macOS 上可能註冊不止一個帶相似標籤的 launchd 作業——尤其在團隊混用桌面應用路徑CLI 網關安裝時。在 港/日/韓/新/美7×24 租賃 Apple Silicon 雲 Mac 上,這會表現為面板抖動、修改 ~/.openclaw/openclaw.json 後行為仍“像舊的”、或 18789 端口被陳舊二進制佔用。openclaw doctor 是官方推薦的第一步排障;本文把 doctor 輸出整理成可重複的收斂手冊。升級後請配合 升級與回滾、與 網關故障排查、以及 launchd 環境變量與 API 密鑰 一起使用。

哪些症狀像“重複服務”

  • openclaw gateway statuslaunchctl list 不一致。
  • 編輯 ~/.openclaw/openclaw.json 後運行時行為不變。
  • ~/Library/LaunchAgents/ 下有兩個 plist,ProgramArguments 指向不同 OpenClaw 路徑。
切勿~/.openclaw 放在 iCloud Drive / Dropbox —— 文件鎖會破壞代理狀態;請放在租賃機本地 NVMe。

重複 LaunchAgent 的根因

重複很少“隨機出現”,通常來自安裝路徑隨時間變化。長租裸金屬上常見序列:

  • 升級未卸載:npm -g 升級後,舊 app bundle 仍註冊網關 plist。
  • 多賬戶試驗adminbuilder 各留一份 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 全文與時間戳。

稽核提示:對生產網關機,至少保留最近 90 天 的 doctor 輸出與 plist 歸檔路徑;出現客戶側連線抖動時,先比對 18789 監聽 PID 與 plist 中 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,記錄 LabelProgramArgumentsEnvironmentVariables。若同時存在 ai.openclaw.gatewayai.openclaw.mac 風格標籤,需選定本機唯一安裝模式(原生 npm 或 app bundle)。

留意 WorkingDirectory 與注入的 PATH:重複實例常只差 Node 路徑(/usr/local/bin vs ~/.nvm/versions/...),就足以分叉運行時。請在運維手冊用三列表格記錄差異,避免下一輪值班又把第二份 plist 加回來。

收斂順序(儘量縮短中斷)

  1. 若有外部自動化依賴該網關,先公告維護;bootout 期間監聽中斷常見 30–120 秒
  2. 對每個非權威 Label 執行 launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/<duplicate>.plist(若使用不同 bootstrap 域請相應調整)。
  3. launchctl print gui/$(id -u)/<label> 確認僅剩預期作業。
  4. 將退役 plist 移到 ~/Archive/LaunchAgents-2026-04-09/ 而非直接刪除,便於回滾比對。
  5. 對選定模式只執行一次 openclaw gateway install(或 doctor 建議的修復);避免同一分鐘內重複跑安裝腳本。
  6. 如需則 launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/<canonical>.plist,再反覆運行 doctor 直至乾淨。
無頭機常無 GUI 登入會話——記住 LaunchAgents 在已登入用戶上下文加載。若必須開機即起服務,請單獨文檔化 LaunchDaemon 方案;預設 OpenClaw 路徑假設用戶代理。

驗證網關健康

  1. lsof -nP -iTCP:18789 | grep LISTEN —— 應只有一個 PID 監聽。
  2. openclaw gateway status —— 與上次綠髮布的基線輸出對比。
  3. openclaw logs --follow(採樣 200 行)——對照 安裝指南 基線。
  4. 若暴露健康檢查路由,可從 日本或美國 另一臺 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 並複檢監聽。穩定裸金屬讓這套演練成本很低——詳見 套餐幫助

OpenClaw + Xcode 雲 Mac

HK · JP · KR · SG · US