Agent Runtime 暂停与恢复 Sandbox Instance

Sandbox Instance 需要临时中断、稍后继续使用时,可以将实例从 RUNNING 暂停到 PAUSED,再恢复到 RUNNING。

相关产品
Agent Runtime 产品页,含版本规格、价格与购买入口。

一、适用场景

·Agent 任务需要等待用户输入或外部依赖,稍后继续执行。

·分阶段执行任务,希望在阶段之间释放运行资源并保留当前环境。

·临时中断交互式沙箱,后续继续使用同一个 InstanceId。

二、对系统影响

·暂停成功后,实例在恢复前不再提供原有访问能力。

·暂停的实例会占用暂停实例配额,单一主账号单一地域下,默认暂停实例配额为20个,可通过 提交工单 联系我们提升配额;恢复成功后自动释放对应的暂停实例配额。

三、前提条件

·已创建目标实例,并记录实例 ID。

·使用 agr CLI 时,已按 安装与配置 完成配置。

·暂停前实例状态为 RUNNING;恢复前实例状态为 PAUSED。

执行以下命令确认 CLI、凭证和实例状态:

agr version -o json –non-interactiveagr status -o json –non-interactiveagr instance get <instance-id> -o json –non-interactive

如果没有可用实例,请先参考 启动 Sandbox Instance 创建实例,并记录返回的 Data.InstanceId。

四、状态与完成判定

暂停与恢复涉及以下状态:

状态 含义 后续操作
RUNNING 实例正在运行 可以暂停或停止。
PAUSING 暂停请求已受理,平台仍在处理 继续查询,不能立即恢复。
PAUSED 暂停完成 可以恢复或停止。
PAUSE_FAILED 暂停失败 查询实例后重试暂停,或停止实例。
RESUME_FAILED 恢复失败 查询实例后重试恢复,或停止实例。

暂停默认会在服务端同步等待完成;大多数请求返回时实例已经进入 PAUSED。只有同步等待时间用尽、暂停仍未完成时,操作才继续在后台推进。云 API 会通过 InstanceStatus=PAUSING 明确返回这种退化情况;E2B 接口则返回冲突错误,不会把仍在进行的暂停当作成功。

恢复完成以实例回到 RUNNING 为准。

六、1. 暂停实例

INSTANCE_ID="<instance-id>"agr instance pause "$INSTANCE_ID" -o json –non-interactive

命令返回 RequestId 表示请求已受理:

{ "SchemaVersion": "agr.v1", "Command": "instance.pause", "Status": "succeeded", "Data": { "RequestId": "<request-id>" }, "Failure": null}

请避免对同一个实例并发发起多个暂停或恢复请求。

七、2. 确认暂停结果

agr instance pause 当前只展示 RequestId,因此命令返回后查询一次实例状态:

agr instance get "$INSTANCE_ID" -o json –non-interactive

·PAUSED:暂停已经完成。

·PAUSING:暂停仍在后台进行。不要重复调用暂停,可稍后再次查询。

·PAUSE_FAILED、FAILED、STOPPING 或 STOPPED:停止等待,并按对应状态处理。

CLI 适合人工确认状态。如果需要在程序中自动等待暂停完成,请使用云 API,并设置查询间隔与总等待时间。

八、3. 恢复实例

agr instance resume "$INSTANCE_ID" -o json –non-interactiveagr instance get "$INSTANCE_ID" -o json –non-interactive

恢复命令返回 RequestId 表示请求已受理。再次查询时,Data.Status 为 RUNNING 表示恢复完成。如果返回 RESUME_FAILED,请确认实例状态和配额后再重试恢复。

九、4. 清理实例

不再使用实例时,执行:

agr instance delete "$INSTANCE_ID" -o json –non-interactiveagr instance get "$INSTANCE_ID" -o json –non-interactive

实例进入 STOPPED 后不能再恢复。

十、使用 云 API

云 API 请求域名为 ags.tencentcloudapi.com,实例相关 Action 的 Version 为 2025-09-20。以下示例只展示业务参数,实际调用时还需携带标准 云 API 公共参数。

十一、1. 暂停实例

调用 PauseSandboxInstance:

{ "Action": "PauseSandboxInstance", "InstanceId": "<instance-id>"}

服务端会先同步等待暂停完成。成功响应包含请求 ID 和返回时刻的实例状态:

{ "Response": { "RequestId": "<request-id>", "InstanceStatus": "PAUSED" }}

InstanceStatus 的处理方式:

·PAUSED:暂停已经完成,可以恢复。

·PAUSING:暂停仍在后台进行,请调用 DescribeSandboxInstanceList 查询状态。

·请求返回错误:结合错误码和实例查询结果判断是否进入 PAUSE_FAILED,或是否仍为 RUNNING。

十二、2. 在 PAUSING 时查询状态

仅当 PauseSandboxInstance 返回 InstanceStatus=PAUSING 时,才需要调用:

{ "Action": "DescribeSandboxInstanceList", "InstanceIds": ["<instance-id>"]}

建议每 2~5 秒查询一次,并设置总等待时间。状态变为 PAUSED 后可以恢复;状态变为 PAUSE_FAILED、STOPPING 或 STOPPED 时停止查询并按对应状态处理;超过总等待时间后返回超时,不要继续无限轮询。

十三、3. 恢复实例

调用 ResumeSandboxInstance:

{ "Action": "ResumeSandboxInstance", "InstanceId": "<instance-id>"}

如需设置恢复后的运行时长,可传入 duration 格式的 Timeout:

{ "Action": "ResumeSandboxInstance", "InstanceId": "<instance-id>", "Timeout": "30m"}

成功响应包含 RequestId。随后调用 DescribeSandboxInstanceList;状态为 RUNNING 表示恢复完成,状态为 RESUME_FAILED 表示恢复失败。

十四、使用 E2B Python SDK

E2B Python SDK 通过 pause() 暂停,通过 Sandbox.connect() 连接并恢复已暂停实例。

from e2b import Sandboxsandbox = Sandbox.create(template="<tool-id>", timeout=300)sandbox_id = sandbox.sandbox_idtry: sandbox.pause() # pause() 正常返回表示暂停已经完成,不需要再轮询状态。 sandbox = Sandbox.connect(sandbox_id)finally: sandbox.kill()

E2B 接口与 云 API 的返回语义不同:

·pause() 正常返回时,服务端已经确认实例进入 PAUSED,可以直接调用 Sandbox.connect()。

·如果同步等待时间用尽、实例仍在暂停,E2B 接口会返回冲突错误,提示暂停仍在进行;它不会像 云 API 一样成功返回 InstanceStatus=PAUSING。

·遇到“暂停仍在进行”的冲突错误时,不要立即重复调用 pause(),也不要用 get_info() 无限轮询。确实需要随后恢复时,可以为 Sandbox.connect() 设置总超时,并使用有上限的指数退避重试。

·E2B 标准 state 字段不能精确表达 PAUSING 和 PAUSE_FAILED。AGS 会在返回对象的 metadata["x-ags-sandbox-state"] 中提供真实生命周期状态,例如 running、paused、pausing、pause_failed 和 resume_failed。

·读取 E2B 返回对象时,如需区分细粒度生命周期状态,请使用 metadata["x-ags-sandbox-state"];标准 state 字段仅用于保持 E2B SDK 兼容。

十六、为什么暂停后仍可能看到 PAUSING?

暂停默认会同步等待完成。只有服务端等待时间用尽、暂停仍未完成时,操作才在后台继续。云 API 会返回 InstanceStatus=PAUSING;agr 未展示该字段时可以查询一次实例状态。此时请执行有上限的状态查询,进入 PAUSED 后再恢复。E2B 则会返回冲突错误,不会把 PAUSING 当作暂停成功。

十七、暂停失败后怎么办?

先查询实例状态。如果状态为 PAUSE_FAILED,可以重试暂停;如果实例仍为 RUNNING,确认业务仍可访问后再决定是否重新暂停;不再需要时直接停止实例。

十八、恢复失败后怎么办?

先查询实例状态和健康状态,并检查应用日志与探针结果。如果状态为 RESUME_FAILED,或恢复后健康状态持续为 unhealthy,请勿无限重试恢复,也不要停止实例或重新创建,以免丢失故障现场。请保留当前实例,记录 InstanceId、RequestId、应用日志和探针结果,并联系 AGS 团队排查。

十九、暂停后还能直接停止吗?

可以。实例不再需要时可以直接停止,无需先恢复。

20、最佳实践

·使用 云 API 时先检查 PauseSandboxInstance 返回的 InstanceStatus:PAUSED 无需轮询,只有 PAUSING 才执行有上限的状态查询。

·使用 E2B 时,pause() 正常返回后可以直接连接恢复;只有收到“暂停仍在进行”的冲突错误时,才执行有上限的连接重试。

·只对确认已暂停的实例发起恢复,并为状态查询和重试设置总超时。

·避免对同一实例并发暂停、恢复或停止。

·不再使用实例时及时停止,避免长期占用暂停实例配额。

21、相关文档

·启动 Sandbox Instance

·查询 Sandbox Instance

·实例生命周期

·停止与超时

赞 (0)
上一篇 4天前
下一篇 4天前