快速开始
重启恢复
重启 Gateway 网关不会丢失智能体状态。对话、转录记录、 定时任务、后台任务记录和排队等待的出站消息都存储在 磁盘上;轮次执行中途被中断的工作会在 Gateway 网关恢复运行后 被自动检测并恢复。无需手动干预, 也无需进行任何配置:恢复功能始终启用。
本页介绍哪些状态可在重启后保留、如何检测中断的工作, 以及自动恢复的具体过程。
重启后保留的状态
| 状态 | 存储方式 | 重启时的行为 |
|---|---|---|
| 对话历史记录 | JSONL 转录记录 + 磁盘上的每智能体会话存储 | 保持不变;会话从已存储的转录记录继续 |
| 中断的主会话轮次 | 会话存储中的恢复标记 | 启动几秒后自动恢复 |
| 子智能体运行 | SQLite(共享状态数据库) | 启动时恢复注册表;恢复中断的运行 |
| 后台任务 | SQLite(共享状态数据库) | 启动时协调状态;恢复孤立的运行或将其标记为丢失 |
| 排队等待的出站投递 | SQLite 投递队列 | 重启后清空队列;重试尚未投递的回复 |
| 定时(cron)任务 | SQLite cron 存储 | 调度计划持久保留;调度器在启动时重新启用 |
| 重启后继续执行 | SQLite 重启哨兵 | 向请求重启的会话分派一次性后续轮次 |
优雅重启会先等待任务完成
请求重启(openclaw gateway restart、需要
重启的配置更改或 Gateway 网关更新)不会立即终止正在执行的工作。
Gateway 网关会停止接受新工作,然后等待活跃的智能体轮次和
后台任务完成,最长不超过排空时限(默认为 5 分钟)。因此,大多数
重启不会中断任何工作。
只有无法在排空时限内完成的工作(或因强制重启或崩溃而中断的任何运行) 才会被中止——而且在此之前,每个 受影响的会话都会被标记为需要恢复。
如何检测中断的工作
有两种互补机制用于标记轮次未完成的会话:
- **关闭时:**在重启排空期间,会话存储中每个存在活跃运行的会话 都会被写入恢复标记,然后才会中止该运行。
- **启动时:**Gateway 网关会扫描会话存储,查找仍然 声称正在运行、但在新进程中没有活跃所有者的会话。此机制可处理 未执行任何关闭代码的严重崩溃和进程终止。同时也会清理过期的转录记录锁 文件。
自动恢复
启动几秒后,Gateway 网关会重新分派每个已标记的会话, 并附上一条合成的系统消息,告知智能体其上一轮次因重启而 中断,并要求其从现有转录记录继续。如果最终回复已经生成但尚未投递, 消息中会包含其文本, 以便智能体直接投递,而不是重新执行工作。恢复过程最多重试 3 次,并采用指数退避。
恢复前,Gateway 网关会检查转录记录末尾是否适合 继续执行。如果不适合(例如,该轮次结束于一个过期的待处理 审批),则不会盲目地重新运行该会话;智能体会改为发布一条简短 通知,请用户重新发送上一个请求。
OpenClaw 还可以重建中断的只读代码模式
工作。代码模式会将这些运行标记为重启安全,并在有副作用的
目录工具或插件命名空间执行前拒绝它们。如果重启发生在
wait 控制处,新 Gateway 网关会根据转录记录重建该轮次,
并强制重建后的执行保持重启安全,即使
模型省略或清除了该标志。宿主会将整个重建轮次限制为经过审计的
只读核心工具和明确可安全重放的插件工具,
即使代码模式在重启后已禁用也是如此。有副作用的工作
仍由重新发送通知保护,避免重复写入的风险。
子智能体
子智能体运行持久化在共享 SQLite 状态数据库中,因此 子智能体注册表可跨进程保留。启动时会恢复注册表,并使用原始任务上下文 恢复中断的子智能体会话。 此过程应用两项安全阀:
- 超过 2 小时前中断的运行会被终结,而不是恢复,因此 停机一整夜的 Gateway 网关不会重新唤醒过期工作。
- 反复恢复失败的会话会被标记为卡死并设置墓碑, 防止恢复过程无限循环。
后台任务
后台任务注册表由 SQLite 支持, 会在启动时及定期进行协调:恢复已完成运行记录的持久结果, 而所有者进程已消失的运行会在宽限期后 被标记为丢失,而不是永久挂起。
智能体请求的重启
当智能体自身触发重启(应用配置更改、更新 Gateway 网关或显式请求重启)时,会在进程退出前向 SQLite 写入重启哨兵。启动后,Gateway 网关会将结果发回 发起请求的聊天,并分派一次性后续轮次,使 智能体在同一渠道和线程中从中断处准确继续。
安全阀和可观测性
- **崩溃循环熔断器:**5 分钟内发生 3 次非正常启动会触发熔断器, 在下次启动时禁止自动启动辅助服务,从而防止崩溃的 Gateway 网关 加剧自身问题。非正常启动时间窗口清空后,熔断器会恢复。
- **指标:**恢复活动通过
Prometheus 导出为
openclaw_session_recovery_total和openclaw_session_recovery_age_seconds。 - **日志:**恢复决策记录在
main-session-restart-recovery和subagent-interrupted-resume子系统的日志中。
不会恢复的内容
- 因已有其他所有者负责处理而被排除在主会话恢复之外的会话: 子智能体会话(由子智能体恢复机制处理)、cron 会话(由 调度器按计划重新运行)和 ACP 管理的会话(由连接的 IDE 或客户端负责恢复)。
- 转录记录末尾无法安全继续的会话;这些会话会收到 上述重新发送通知,而不是被静默地重新运行。
- 从未被接纳的工作:在排空时间窗口内到达的消息会 收到明确的重启错误并被拒绝,而不是被静默地排入即将终止的 进程。