Skip to content
FunCoding

Search

Search docs, Skills and MCP

Hosted Workspace 运维恢复

为原始 Linux durable worker 释放残留工作区租约,保留原 Shell 不确定性。

This page has not been translated into English yet. The original Chinese version is shown below.

此流程仅用于原主机上的 Linux durable local-process worker:Hosted Shell capture 不完整,且 Workspace lease 仍被占用。恢复只让物理工作区可供新 Session 使用,不会完成、重放或认证原 Shell 调用。

维护进程前提

使用 qwen-managed-agent-server-*-operator-recovery.jar,以服务 OS 账号在原 worker 主机运行,使用原服务数据库、Runtime credential key 和 QWEN_MANAGED_AGENT_RUNTIME_STATE_DIRECTORY。先应用服务数据库迁移。

维护环境需设置 QWEN_MANAGED_AGENT_RUNTIME_DURABLE_LOCAL_PROCESS=true、QWEN_MANAGED_AGENT_RUNTIME_PROVISIONER=local-process、QWEN_MANAGED_AGENT_RUNTIME_OPERATOR_RECOVERY_ENABLED=true。该进程不启动 HTTP listener、scheduler 或 worker;凭据与数据库环境不对外公开。

Inspect 与 Prepare

从 run 记录取得 runtimeBindingId 和 generation;记录不可用时,由有权限 DBA 只读查询 qwen_runtime_binding,按 tenant/workspace 核对匹配的 binding 和 lease,不创造替代身份。

java -jar qwen-managed-agent-server-*-operator-recovery.jar inspect <bindingId> <generation>
java -jar qwen-managed-agent-server-*-operator-recovery.jar prepare <bindingId> <generation> <holderKey> '<incident reason>'

Inspect 后保存 holderKey、Runtime Session、Shell call、captureStatus/reason。要求已保存 producer_lost Shell 结果和精确仍持有的 lease。Prepare 返回 recoveryId,设 OPERATOR_RECOVERY fence;原本 LOST 保持 LOST,不释放工作区。

相同服务 OS 账号和原因可重复 prepare,不同账号、原因、generation 或 holder 会拒绝。operator_id 记录 OS 账号,真人操作员另记事故记录。

隔离所有写入者

停止原 worker,检查分离子进程和外部 supervisor,阻止自动重启并验证。进程组已死、管道 EOF、时间流逝或父 PID 消失都不够;prepare 到 complete 之间重启主机也不能免除此检查。

不能建立该事实时保留 fence。软件可检查注册身份和 SQL holder,却不能证明任意逃逸后代都已停止,操作员声明承担这部分证明责任。

提交证据文件

在私有 Runtime state 目录的直接子级创建普通非符号链接 UTF-8 JSON 文件,最多 8KiB、权限 0600,精确字段为 version、recoveryId、verifiedAt、method、actions、restartPrevention。

version 为 1,restartPrevention 为 true;verifiedAt 必须是实际 UTC 核验时间,不早于 prepare,且不能超过维护主机时钟未来五分钟。actions 写实际完成的停止和防重启步骤,不能先填一份“已检查”模板。

java -jar qwen-managed-agent-server-*-operator-recovery.jar complete <recoveryId> <absoluteEvidenceFile>

Complete 校验精确保存的身份;同 boot 检查 worker 不存在,跨重启检查 boot 变化,然后写 tombstone、保存不可变声明并仅回收原 holder。崩溃或临时数据库失败可用同一文件重试,改声明会拒绝。成功输出 completed。

恢复后验证

启动新 Session 验证工作区可用,原轮次单独检查,其部分输出和未知影响仍未知。不能清 SQL 表或注册文件绕过拒绝;缺失/损坏注册或旧 ephemeral worker 不支持此流程,需保留证据交维护者。