运行命令并等待结果
启动命令,在命令结束时 (200) 或 wait_seconds 到时(202,附带命令的地址)返回。等待到时命令已经结束的,会读完输出并返回 200:202 一定表示命令仍在运行。等待期间沙箱不会自行休眠;如果在本调用等待时沙箱被休眠,调用会继续等待,wait_seconds 到时,根据沙箱进入休眠时节点记录的命令状态返回 202,不会唤醒沙箱。命令属于沙箱,而不属于本次请求:调用方离开后命令继续运行。带 Idempotency-Key 时,用相同的键和请求体再次调用,会找到第一次请求启动的命令,并据此返回,附带 Idempotent-Replayed: true;同一个键配上不同的请求体返回 409 idempotency_key_reused。
以事件流 (text/event-stream) 返回:事件有 start、stdout、stderr、gap、exit 和 error:见事件流和终端。
所需权限范围:exec,或带 exec 的沙箱令牌。
https://api.glac.ai/v1/sandboxes/{id}/run授权
路径参数
请求头参数
请求体JSON必填
Returns
200
命令已结束:以 JSON 返回结果;或者以事件流返回命令从第一个字节到结束的全部输出。
string202
wait_seconds 到时命令仍在运行:这不是最终结果。status 为 running,stdout 和 stderr 中是命令截至当时写出的内容。请求 Location 中的地址(带上 wait_seconds)获取结果。
400
请求不符合本调用的要求。invalid_json:请求体不是 JSON 对象;unknown_field:请求体中有本调用不接受的字段;unknown_parameter:查询中有本调用不接受的参数;invalid_field:某个字段或查询参数类型错误或超出范围;missing_command:缺少 command;invalid_env:env 中有环境变量无法容纳的名称或值;no_such_user:user 不是沙箱中的用户;terminal_needs_exec:给出了 tty;invalid_idempotency_key:Idempotency-Key 为空或超过 255 个字符。
401
missing_api_key, invalid_api_key, expired_api_key, invalid_token.
403
凭据无权执行此操作。token_scope:沙箱令牌缺少所需的权限范围。spend_limit_reached:沙箱因达到支出上限而被冻结;它会连同数据一起休眠,直到上限提高。
404
请求中指定的对象不存在。sandbox_not_found:沙箱不存在。
409
某个对象的状态不允许此操作。command_lost:调用等待期间命令消失了;sandbox_moved:调用等待期间沙箱被迁到了另一个节点,命令在那里继续运行(to、epoch、offset,以及命令的 id exec_id):通过控制平面用 GET …/exec/{exec_id}?wait_seconds= 在那里等待它,或者用同一个 Idempotency-Key 再次发起同一调用(不带键会再启动一次命令);sandbox_failed:沙箱处于 failed 状态;idempotency_key_reused:该键已与另一个请求体一起使用过。
default
其他任何失败,格式相同。internal (500):节点出错;错误信息不会多说,节点日志中以请求的 id 记录了原因。unavailable(503,可重试):no_capacity,节点的网络槽位都已占用;memory_full,调用需要启动的虚拟机(创建、唤醒、从磁盘启动、恢复、回滚、构建)在宿主机内存中放不下(还要算上已承诺给其上运行的虚拟机的内存),也没有暂停或空闲的虚拟机可以让其休眠来腾出空间(节点的 memory);drive_full,调用需要构建模板,而节点的数据盘没有空间(节点的 drive);unavailable,节点正在关闭、沙箱 10 分钟后仍处于 starting、沙箱没有响应,或者沙箱正在迁到本节点(带 Retry-After: 1);fenced,节点的租约隔离了该沙箱 (Node.lease)。moved (409):沙箱已迁到另一个节点,由 to 指明。