快速开始

重启恢复

重启 Gateway 网关不会丢失智能体状态。对话、转录记录、定时任务、后台任务记录和排队等待的出站消息都存储在磁盘上;轮次进行到一半时中断的工作会被检测到,并在 Gateway 网关恢复运行后自动继续。无需手动干预,也没有任何需要配置的内容:恢复功能始终开启。

本页介绍哪些内容会在重启后保留、如何检测中断的工作,以及自动继续的具体过程。

重启后保留的内容

状态 存储方式 重启期间的行为
对话历史记录 每智能体 SQLite 数据库 保持不变;会话从已存储的转录记录继续
中断的主会话轮次 每智能体 SQLite 会话行和转录记录 启动几秒后自动继续
子智能体运行 SQLite(共享状态数据库) 启动时恢复注册表;继续中断的运行
后台任务 SQLite(共享状态数据库) 启动时协调状态;恢复孤立运行或将其标记为丢失
排队等待的出站递送 SQLite 递送队列 重启后排空;重试尚未递送的回复
定时(cron)任务 SQLite cron 存储 调度计划会持久保留;调度器在启动时重新启用
重启后继续 SQLite 重启哨兵记录 向请求重启的会话分派一次性后续轮次

优雅重启会先等待任务排空

请求的重启(openclaw gateway restart、需要重启的配置变更或 Gateway 网关更新)不会立即终止正在进行的工作。Gateway 网关会停止接受新工作,然后等待活跃的智能体轮次和后台任务完成,最长不超过排空时限(默认为 5 分钟)。因此,大多数重启根本不会中断任何工作。

只有无法在排空时限内完成的工作(或因强制重启或崩溃而中断的任何运行)才会被中止——而在此之前,每个受影响的会话都会被标记为待恢复。

如何检测中断的工作

有三种互补机制会标记轮次未完成的会话:

  • **Control UI 接入时:**对于现有主会话中的普通文本轮次,Gateway 网关会追加用户消息、将会话标记为正在运行,并在返回 started 确认之前,通过一个 SQLite 事务记录其仅转录记录的递送声明。 命令、附件、单轮次覆盖项、待处理递送、先前的中止提示、插件所有的会话,以及带有执行钩子的轮次,仍使用各自的专用接入路径。
  • **关闭时:**在重启排空期间,每个存在活跃运行的会话都会先在会话存储中写入恢复标记,然后才中止运行。
  • **启动时:**Gateway 网关会扫描会话存储,查找仍声明为正在运行、但在新进程中没有活跃所有者的会话。这可以捕获未执行任何关闭代码的严重崩溃和进程终止。同时也会清理过期的转录记录锁文件。

自动继续

启动几秒后,Gateway 网关会重新分派每个已标记的会话,并附带一条合成的系统消息,告知智能体上一个轮次因重启而中断,并要求它根据现有转录记录继续。如果最终回复已生成但尚未递送,其文本也会包含在内,以便智能体直接递送,而不是重新执行工作。恢复过程最多重试 3 次,并采用指数退避。每次重试都会复用同一个持久分派标识符,因此连接失败状态不明确时,不会将同一恢复过程启动两次。已完成和无法继续的 Control UI 轮次还会保留有界的持久幂等墓碑记录,使重新连接的发件箱可以将其清除,而无需重新执行请求。

继续之前,Gateway 网关会检查转录记录末尾是否可以安全地接续。如果不能(例如,轮次结束于一个过期的待处理审批),则不会盲目地重新运行会话;智能体会改为发布一条简短通知,请用户重新发送最后一个请求。对于 WebChat,该通知会直接写入会话历史记录,因此重新连接后仍然可见。

OpenClaw 还可以重建中断的只读代码模式工作。代码模式会将这些运行标记为重启安全,并在具有副作用的目录工具或插件命名空间执行之前拒绝它们。如果在 wait 控制处发生重启,新的 Gateway 网关会根据转录记录重建该轮次,并强制重建后的执行保持重启安全,即使模型省略或清除了该标志也是如此。主机会将整个重建轮次限制为经过审计的只读核心工具和明确可安全重放的插件工具,即使重启后已禁用代码模式也是如此。具有副作用的工作仍由重新发送通知保护,从而避免重复写入的风险。

子智能体

子智能体运行会持久化到共享 SQLite 状态数据库,因此子智能体注册表可跨进程保留。启动时会恢复注册表,并使用原始任务上下文继续中断的子智能体会话。以下两项安全阀适用:

  • 超过 2 小时前中断的运行会被结束,而不是继续,因此停机一整夜的 Gateway 网关不会重新唤起过期工作。
  • 持续恢复失败的会话会被写入墓碑记录并标记为卡死,从而避免恢复过程无限循环。

后台任务

后台任务注册表以 SQLite 为后端,并在启动时和定期间隔内协调状态:恢复已完成运行所记录的持久结果;对于所有者进程已消失的运行,则在宽限期后将其标记为丢失,而不是让其永远挂起。

智能体请求的重启

当智能体自身触发重启时(应用配置变更、更新 Gateway 网关或显式请求重启),会在进程退出前向 SQLite 写入重启哨兵记录。启动后,Gateway 网关会将结果发回原始聊天,并分派一次性的后续轮次,使智能体在同一渠道和线程中从中断处准确继续。

安全阀和可观测性

  • **崩溃循环断路器:**在 5 分钟内发生 3 次非正常启动会触发断路器,在下一次启动时抑制自动启动的辅助服务,避免持续崩溃的 Gateway 网关放大问题。非正常启动时间窗口结束后,系统会恢复正常。
  • **指标:**恢复活动通过 Prometheus 导出为 openclaw_session_recovery_totalopenclaw_session_recovery_age_seconds
  • **日志:**恢复决策记录在 main-session-restart-recoverysubagent-interrupted-resume 子系统下。

不会继续的内容

  • 因已有其他所有者负责处理而不纳入主会话恢复的会话:子智能体会话(由子智能体恢复机制处理)、cron 会话(调度器会按计划重新运行)以及 ACP 管理的会话(由已连接的 IDE 或客户端负责继续)。
  • 转录记录末尾无法安全接续的会话;这些会话会收到上述重新发送通知,而不是静默地重新运行。
  • 从未接入的工作:排空时间窗口内到达的消息会收到明确的重启错误并被拒绝,而不会被静默排入一个即将终止的进程。
Was this useful?
On this page

On this page