2026 OpenClaw 換機遷移與冷啟動 Runbook:從拷貝目錄到 Gateway 首次聯通(systemd 與 launchd 清單)

~/.openclaw 與工作區整棵拷到新機器後,常見症狀是 openclaw 找不到、Gateway 起不來或通道「已配對但無響應」。本文按介質→環境→服務→通道分層,給 systemd 與 launchd 對照、七步冷啟動順序、可抄的快檢命令,並與站內《安裝路徑對照》《status→doctor 階梯》互補。

OpenClaw 換機後在新 Mac 雲或 Linux 上完成 Gateway 冷啟動與首次聯通的示意圖

本文要點

1. 痛點拆解:拷貝≠可運行

換機時最容易產生的錯覺是「目錄一樣就應該行為一樣」。實際上 OpenClaw 同時依賴安裝介質(哪條 openclawPATH 最前)、用戶態配置樹~/.openclaw)、工作區常駐服務的啟動上下文。缺任一層都會在冷啟動階段表現為隨機:有時 SSH 裡手動能跑、斷線或重啟後又不起來。

  1. CLI 入口漂移:舊機用 npm -g、新機只有 install.sh 或反之,PATH 未繼承時直接 command not found;拷貝配置並不能自動帶來同一套二進位。若團隊曾混用 pnpm 源碼目錄與全局包,還會出現「版本字符串一致但動態連結路徑不同」的隱性分叉。
  2. daemon 上下文斷裂:Linux 上習慣 systemd --userEnvironment=HOME;macOS 上 launchd 若不顯式設 WorkingDirectoryPATH,Gateway 會以意外 cwd 啟動,日誌寫錯盤或讀不到密鑰。企業鏡像裡常見的「登錄 shell 才注入的 nvm/pnpm 前綴」在 plist 裡默認不存在,必須在單元裡寫死或用薄封裝腳本導出環境。
  3. 冷啟動順序錯誤:未校驗 openclaw.json 與 18789 就去做通道 pairing,會誤判為「通道壞了」;應先確認本機 Gateway 探針再查上遊。否則你會在聊天側反覆解綁、重掃二維碼,而根因只是本機監聽地址綁在 127.0.0.1 卻從另一網段來探。
  4. 卷與屬主在遷移後錯位rsync 若以 root 拉樹再切回業務用戶,可能出現「配置可讀、日誌目錄不可寫」的半失敗:進程活著但不落診斷信息,排障時間被拉長。

2. systemd 與 launchd:環境差異對照表

下表用於 Runbook 附件;列「第一站」指遷移後本機側應先核對的項,與通道文檔區分。跨平臺團隊建議把「服務定義文件」與「安裝介質決策」放在同一變更單裡評審:否則極易出現「單元照抄、環境未對齊」的無效遷移。

若目標機是 Mac 雲且計劃長期在線,優先在 launchd 層把絕對路徑固定日誌文件寫清,再討論是否要 Docker 分區;反過來,在 Linux VPS 上若已用 systemd --user 管其他代理進程,可把 OpenClaw Gateway 與用戶級 slice 一併納入資源上限策略,避免與構建機爭用 CPU 時拖垮響應。

維度Linux(systemd 用戶單元)macOS(launchd LaunchAgent)遷移第一站
環境變量Environment= 塊或 drop-inplist 無繼承 shell;需寫死或 wrapper核對 HOMEPATH 與 API Key 注入方式
工作目錄WorkingDirectory=WorkingDirectory與 workspace 根一致,避免相對路徑密鑰
日誌journalctl --user -uStandardOutPath / StandardErrorPath先確認文件屬主可寫
開機拉起enable --userRunAtLoad + bootstrap 域重啟後驗收一次「非 SSH 子進程」
權限模型uid/gid + 可選 cgroup沙箱與 Full Disk Access 視工具鏈鑰匙串/文件隱私權限單獨測

3. 七步冷啟動:從目錄到首次聯通

七步刻意把「人眼能確認的輸出」放在前,把「需要外部帳號配合」的動作放在後,減少無效往返。演練時建議兩人:一人改單元文件,一人只讀 tail 日誌,避免同時改配置與看通道。若夜間割接,把每步預計耗時寫進窗口公告,便於值班長判斷是繼續還是回滾。

  1. 凍結版本與介質:記錄舊機 openclaw --version、安裝方式(npm / pnpm / 腳本 / 鏡像 digest);新機先按《安裝路徑對照》選定唯一入口,避免雙二進位。若必須升級大版本,先在 staging 節點跑一遍 doctor 全綠再遷生產樹。
  2. 同步目錄樹rsync -aH 或等價方式拷貝 ~/.openclaw 與工作區;排除緩存大目錄若團隊有規範;校驗屬主為運行服務的用戶。同步後立刻做一次只讀校驗:關鍵文件 mtime 與大小是否與舊機摘要一致,防止傳輸中斷被忽略。
  3. 權限與密鑰可達ls -la ~/.openclaw;若用容器,核對卷映射與 uid,參見安裝文 Docker 節。任何「宿主機工具鏈讀容器內生成配置」的反模式都應在 Runbook 裡標紅禁止。
  4. 寫服務單元:Linux 用 systemd --user unit 寫明 Environment;macOS 寫 LaunchAgent plist,ProgramArguments絕對路徑指向 openclaw。單元內建議顯式寫出監聽地址與埠變量,避免默認值在版本間變化。
  5. 加載並冷啟systemctl --user daemon-reload && restartlaunchctl bootstrap + kickstart;確認進程父進程為 systemd/launchd。若仍看到 SSH 會話為父進程,說明未真正常駐化。
  6. 本機探針lsof -i :18789、最小 JSON 校驗、openclaw doctor 按階梯執行;異常時對照《status→doctor》。探針未綠前不要動通道側 token,以免把帳號狀態攪亂。
  7. 通道煙測:Gateway 正常後再做 pairing 或重連;把每步命令與輸出片段記入變更單備審計。煙測通過後再開自動重啟策略與監控探針,避免「告警先於穩定」。

快檢命令塊(可貼 Runbook)which openclawopenclaw --versiontest -r ~/.openclaw/openclaw.json && echo ok;本機 HTTP/WS 探針按團隊規範(如 curl 到綁定地址)。全綠再打開通道側文檔。若機器在公司代理後,再加一條從服務用戶(非你個人 SSH 用戶)執行的出口探測,避免「人能 curl、daemon 不能」的假陰性。

4. 可引用技術信息:路徑、埠與審計欄位

本節可直接貼進內部 wiki 的「附錄」;與正文七步的關係是:正文講順序,本節列不得遺漏的檢查項證據欄位,方便事後復盤。

5. FAQ

Q:只拷了 workspace,沒拷 ~/.openclaw,Gateway 能起來嗎?
通常不能完整復現狀態;至少缺密鑰與本地狀態。應兩卷同遷或按文檔重建密鑰再配對。若必須重建,先在只讀窗口導出舊機敏感欄位清單,避免手工抄錯。

Q:launchctl 顯示已加載但埠未監聽?
StandardErrorPathWorkingDirectory、plist 內 PATH;再用 openclaw doctor 看 schema 與綁定地址。若錯誤日誌為空,懷疑是否寫到無權限路徑導致靜默失敗。

Q:Linux 遷 macOS 後 systemd 單元能直接用嗎?
不能;需改寫成 LaunchAgent,並重做環境變量與日誌路徑驗收。可把原 unit 的環境塊逐行映射到 plist,避免遺漏。

Q:通道無響應但本機 18789 正常?
分層:先確認 Gateway 日誌無報錯,再查上遊網絡與白名單;勿先重置全部配置。若近期改過綁定 IP,優先核對防火牆與監聽地址是否一致。

Q:同一臺機器上想保留舊實例做對照?
務必錯埠與錯 Label,並在 Runbook 寫清「對照實例不得寫生產配置」。否則易出現雙寫同一 JSON 的災難。

6. 從試用到生產:為什麼原生 Mac 雲更省事

換機 Runbook 的變量數與「能否 SSH 到與線上一致的宿主」強相關。筆記本與嵌套虛擬化會放大 PATH、卷與權限差;在專用 Mac 雲上按 launchd 固化與安裝文對齊,最容易把冷啟動寫成可審計步驟。需要隔離時再引入 Docker 分區,而不是在首遷混用多條安裝路徑。

對要把 OpenClaw 當「長期在線能力」的團隊,建議把 Mac 雲當成與生產構建同級的受管資產:磁碟分區、日誌輪轉、登錄審計與節點標籤一併納入,而不是把 Gateway 當成個人開發機上的臨時進程。這樣換機時只需重複同一套 plist 與目錄約定,而不是每人一套偏方。