管理会话与保留输出
管理守护进程就绪状态、会话生命周期、保留输出容量和传输。
Envd 管理一个设备代次及其多个独立会话。运维人员管理守护进程、进程和启动配置的生命周期;每个 EIP 会话管理自己的操作、进程、传输和保留输出。已连接的 socket 和保留输出预览都不是持久化的 agent 检查点。
确认就绪
- 创建私有运行时的父目录。
- 配置设备身份、默认工作目录、可执行文件策略、限制和传输通道。
- 启动守护进程并初始化设备连接;初始化不会创建会话。
- 检查设备描述符,按需浏览目录,无需打开会话。
- 打开新会话,设置固定的设备工作目录和必需方法。
- 在分派工作前确认就绪。
- 将设备代次和会话身份与操作证据一同保存,不要放入无关的全局进程映射。
已接纳会话的空闲 TTL 默认为 30 分钟。保活、断线宽限期和重新附加到完全相同的会话遵循设备声明的生命周期。重新连接传输通道不会重新附加会话,也不会恢复进行中的操作。
会话接纳和设备总配额限制并发。关闭一个会话只会清理其自身资源,其他会话不受影响。固定工作目录不是文件系统安全边界:会话可以访问执行账号和固定 Sandbox 授权允许的其他设备路径。彼此不信任的工作负载需要独立的外层账号、容器或沙箱边界。
使用 Python EIP 客户端管理设备归属、限定范围的会话、精确方法表、超时处理和描述符能力收窄。客户端和守护进程的默认超时可能不同。
守护进程启动前规划输出容量
独立运行时的输出默认值如下:
| 限制 | 默认值 |
|---|---|
| 内联预览 | 2 MiB |
| 每条 stdout/stderr 流 | 256 MiB |
| 每个会话的 spool | 1 GiB |
| 设备总 spool | 4 GiB |
启动命令前,守护进程会为两条流 预留容量。按默认值,一对活跃输出流预留 512 MiB;两对流就可能在计入额外用量前耗尽 1 GiB spool。保留记录还会进一步占用容量。缩小预览不会减少这份预留。
因此,busy 响应可能表示输出预留容量不足,而非 CPU 或网络故障。有限输出上限不代表允许驱逐其他保留记录。可以有计划地提高配额、释放不再需要的观测记录,或降低每条流的预留值,同时保持 spool >= 2 * per_stream 和 preview <= per_stream。
Python Local Envd 通过 Host 启动配置提供自己的预览和文件值默认设置。Docker 环境 provider 不使用 Envd,并有自己的输出限制。请配置相应的运行时字段,不要把会话选择当作守护进程启动配置。
预览、保留字节与完成状态
命令结果或进程读取可能只返回预览。通过限定偏移量或游标读取其保留输出引用,并保留可用范围、来源、完成标志和截断证据。
- 命令完成不等于输出已完整交付。
- 读到当前保留内容末尾不一定意味着生产方 EOF。
- 重复读取不会消费保留内容,也不会恢复已省略的字节。
- 检查进程不代表已附加输出,也不会重置保留预算。
- 不再需要进程或输出观测记录时,使用对应 EIP 方法显式释放。释放不等于终止正在运行的命令。
输出需要在守护进程或会话保留期之后仍可访问时,使用应用管理的文件或其他持久日志目标。不要把私有 spool 当作应用存储 API。
传输与结果不确定的命令
通过传输 API 写文件需要显式提交。关闭或放弃 writer 不代表文件已成功发布。中止未完成的传输,并通过回执和重放证据区分未分派、已知完成和结果未知。
分派后的超时或传输断开不能证明写入或命令未执行。重放类别允许核对结果时,保留原操作身份。绝不能因为缺少确认就盲目重新启动 shell 命令。
会话丢失与守护进程代次丢失是不同情况。本地句柄过期后,provider 的远程目标(例如云沙箱)可能仍存在;新代次会使绑定旧代次的句柄和输出选择器失效。provider 状态可以识别目标,但无法重建已丢弃的进程输出,也不能自动恢复所有命令。
客户端与会话的优雅关闭,以及 provider 的进程清理,各自遵循其资源归属规则。不要用关闭守护进程代替产品层的执行中断,也不要假定突然终止已交付最终清理证据。
在正确的层面排查失败
| 现象 | 检查项 |
|---|---|
| 初始化或会话接纳返回 busy | 设备会话容量、总配额、待完成清理和空闲过期 |
| 缺少必需方法 | 必需方法选择、守护进程账号权限和可执行文件策略 |
| 启动命令前返回 busy 或配额错误 | 每对输出流的预留容量和保留 spool 用量 |
| 预览不完整 | 返回的引用与范围,以及生产方和完成状态证据 |
| 文件系统或命令访问被拒绝 | 守护进程账号权限,以及 Host 的外层边界(执行边界) |
| 命令或写入结果未知 | 原操作回执及其重放/核对类别;不要作为新意图重试 |
| 远程目标不可用 | provider/后端访问和精确的已保存目标身份,不要回退到其他挂载 |
守护进程不提供通用健康检查、浏览器或任意 HTTP 端点。HTTP EIP 提供经过身份验证的控制和传输路由;就绪检查是 EIP 操作。诊断信息不能写入 stdio 协议 stdout。配置定义传输通道和启动字段,执行边界介绍 Host 管理的隔离。