後台命令適合啟動 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,避免暴露敏感介面。