后台命令

更新时间:
复制 MD 格式

后台命令适合启动 Web 服务、长时间运行任务或需要分阶段读取输出的进程。

启动后台命令

将命令设置为后台运行后,SDK 会立即返回进程对象,后续可以继续访问端口、连接进程或终止进程。

TypeScript 示例:

import { Sandbox } from "e2b";

const sandbox = await Sandbox.create("code-interpreter-v1", {
  apiKey: process.env.E2B_API_KEY,
  apiUrl: process.env.E2B_API_URL,
  domain: process.env.E2B_DOMAIN,
});

try {
  const cmd = await sandbox.commands.run("python3 -m http.server 8000", {
    background: true,
    timeoutMs: 10 * 60 * 1000,
  });

  const host = sandbox.getHost(8000);
  console.log(`https://${host}`);

  const running = await sandbox.commands.list();
  console.log(running);

  await cmd.kill();
} finally {
  await sandbox.kill();
}

Python 示例:

import os

from e2b import Sandbox

sandbox = Sandbox.create(
    "code-interpreter-v1",
    api_key=os.environ["E2B_API_KEY"],
    api_url=os.environ["E2B_API_URL"],
    domain=os.environ["E2B_DOMAIN"],
)

try:
    process = sandbox.commands.run(
        "python3 -m http.server 8000",
        background=True,
        timeout=10 * 60,
    )

    host = sandbox.get_host(8000)
    print(f"https://{host}")

    running = sandbox.commands.list()
    print(running)

    process.kill()
finally:
    sandbox.kill()

连接和停止进程

已知进程 ID 时,可以通过 sandbox.commands.connect() 连接到运行中的进程;需要停止进程时,可以调用进程对象的 kill(),也可以使用 sandbox.commands.kill()

不同 SDK 版本中进程 ID 字段和连接参数命名可能不同,建议先通过 sandbox.commands.list() 查看返回结构,再按所用 SDK 的类型定义调用 connect()kill()。如果只是当前调用启动的后台命令,优先保存返回的进程对象并调用 process.kill()

使用建议

  • 启动服务类进程时,先确认服务监听端口,再通过 sandbox.getHost(port) 获取访问地址。

  • 后台进程不会因为 SDK 调用返回而自动结束,但仍受命令执行超时时间约束。E2B SDK 的命令超时默认通常为 60 秒;长时间运行的服务或任务应显式设置合适的超时时间,例如 TypeScript 使用 timeoutMs,Python 使用 timeout,并在任务完成后主动终止进程或终止 Sandbox。

  • 需要持续读取输出的任务,优先使用后台进程和连接进程的方式,不建议用长超时的同步命令阻塞主流程。

  • 对外提供访问地址的服务,应在业务侧设置鉴权或使用一次性任务 URL,避免暴露敏感接口。