跳轉到主要內容
重新啟動閘道不會遺失代理程式狀態。對話、逐字記錄、 排程工作、背景工作記錄及佇列中的外送訊息全都儲存在 磁碟上;閘道重新啟動後,系統會偵測在回合途中中斷的工作並 自動繼續。不需要手動介入,也沒有任何項目需要設定: 復原功能永遠啟用。 本頁說明重新啟動後會保留哪些內容、如何偵測中斷的工作, 以及自動繼續的運作方式。

重新啟動後會保留哪些內容

狀態儲存位置重新啟動時的行為
對話記錄各代理程式的 SQLite 資料庫不受影響;工作階段會從儲存的逐字記錄繼續
中斷的主要工作階段回合各代理程式的 SQLite 工作階段資料列與逐字記錄啟動數秒後自動繼續
子代理程式執行SQLite(共用狀態資料庫)開機時還原登錄;中斷的執行會繼續
背景工作SQLite(共用狀態資料庫)開機時進行調整;復原孤立的執行或將其標示為遺失
佇列中的外送項目SQLite 傳送佇列重新啟動後清空佇列;未傳送的回覆會重試
排程(cron)工作SQLite cron 儲存區排程會保留;排程器在開機時重新啟用
重新啟動後續作業SQLite 重新啟動哨兵將一次性後續作業分派至要求重新啟動的工作階段

正常重新啟動會先等待工作完成

要求重新啟動(openclaw gateway restart、需要 重新啟動的設定變更,或閘道更新)不會立即終止進行中的工作。 閘道會停止接受新工作,接著等待作用中的代理程式回合與 背景工作完成,最多等到排空時間上限(預設為 5 分鐘)。因此,大多數 重新啟動根本不會中斷任何工作。 只有無法在排空時間上限內完成的工作(或遭強制重新啟動或當機 中斷的任何執行)才會中止,而在此之前,每個 受影響的工作階段都會標記為待復原。

如何偵測中斷的工作

三種互補機制會標記回合尚未完成的工作階段:
  • **控制介面受理時:**對現有主要工作階段的一般文字回合, 閘道會附加使用者訊息、將工作階段標記為執行中,並在 傳回 started 確認前,透過單一 SQLite 交易 記錄其僅限逐字記錄的傳送認領。 命令、附件、單回合覆寫、待處理傳送、先前的中止 提示、外掛擁有的工作階段,以及含有執行掛鉤的回合,仍會使用其 專用受理路徑。
  • **關機時:**在重新啟動排空期間,所有具有作用中執行的工作階段 都會在執行中止前,於工作階段儲存區中寫入 復原標記。
  • **啟動時:**閘道會掃描工作階段儲存區,尋找仍 宣告為執行中、但在新處理程序中沒有存活擁有者的工作階段。這可捕捉 未執行任何關機程式碼的嚴重當機與程序終止。同時也會清除過期的逐字記錄鎖定 檔案。

自動繼續

啟動數秒後,閘道會重新分派每個已標記的工作階段, 並附上合成系統訊息,告知代理程式先前的回合因 重新啟動而中斷,並要求從現有逐字記錄繼續。如果 最終回覆已產生但尚未傳送,其文字會包含在內, 讓代理程式能直接傳送,而不必重新執行工作。復原最多重試 3 次,並採用指數退避。每次重試都會重複使用同一個持久性分派 識別碼,因此模稜兩可的連線失敗不會讓同一項復原 啟動兩次。已完成及無法繼續的控制介面回合也會保留有界的持久性 冪等性墓碑,讓重新連線的寄件匣能移除這些項目,而不會 重新執行要求。 繼續之前,閘道會檢查逐字記錄尾端是否能安全地 接續。如果不能(例如,回合結束於過期的待處理 核准),便不會盲目地重新執行工作階段;代理程式會改為發布簡短 通知,要求使用者重新傳送上一個要求。對 WebChat 而言,該通知會 直接寫入工作階段記錄,因此重新連線後仍然可見。 OpenClaw 也能重建中斷的唯讀程式碼模式 工作。程式碼模式會將這些執行標記為可安全重新啟動,並在具有副作用的 目錄工具或外掛命名空間執行前拒絕它們。如果重新啟動發生在 wait 控制項上,新閘道會根據逐字記錄重建回合, 並強制重建後的執行維持可安全重新啟動,即使 模型省略或清除該旗標也一樣。主機會將整個重建後的 回合篩選為經稽核的唯讀核心工具及明確可安全重播的外掛工具, 包括重新啟動後停用程式碼模式的情況。具有副作用的工作 仍會由重新傳送通知保護,以免發生重複寫入。

子代理程式

子代理程式執行會持久儲存在共用 SQLite 狀態資料庫中,因此 子代理程式登錄能跨處理程序保留。開機時會還原登錄,並使用原始工作情境 繼續中斷的子代理程式工作階段。 有兩項安全機制:
  • 超過 2 小時前中斷的執行會直接結束,而不會繼續,因此 關閉一整夜的閘道不會復活過期工作。
  • 持續復原失敗的工作階段會標記為卡死墓碑,避免 復原無限循環。

背景工作

背景工作登錄以 SQLite 為後端, 會在開機時及定期進行調整:已完成執行所記錄的持久性結果 會被復原,而擁有者處理程序已消失的執行則會在 寬限期後標記為遺失,而不是永遠停滯。

代理程式要求的重新啟動

當代理程式本身觸發重新啟動(套用設定變更、更新 閘道,或明確要求重新啟動)時,處理程序結束前會將重新啟動哨兵寫入 SQLite。開機後,閘道會將結果發布回 原始聊天,並分派一次性後續回合,讓 代理程式從中斷處精確接續,且使用相同頻道與討論串。

安全機制與可觀測性

  • **當機循環斷路器:**5 分鐘內發生 3 次非正常開機會觸發斷路器, 在下次開機時抑制自動啟動的周邊服務,避免當機的閘道 擴大問題。非正常開機時間窗排空後即會恢復。
  • **指標:**復原活動會透過 Prometheus匯出為 openclaw_session_recovery_totalopenclaw_session_recovery_age_seconds
  • **日誌:**復原決策會記錄在 main-session-restart-recoverysubagent-interrupted-resume 子系統下。

不會繼續的內容

  • 由於已有其他擁有者負責處理,因此排除於主要工作階段復原之外的 工作階段:子代理程式工作階段(子代理程式復原)、cron 工作階段( 排程器會依排程重新執行),以及由 ACP 管理的工作階段(由連線的 IDE 或用戶端負責繼續)。
  • 無法從逐字記錄尾端安全接續的工作階段;這些工作階段會收到 上述重新傳送通知,而不會無聲地重新執行。
  • 從未受理的工作:在排空時間窗內送達的訊息 會收到明確的重新啟動錯誤而遭拒絕,不會無聲地排入即將終止的 處理程序。