手动暂停与恢复
当 Sandbox 被暂停时:- Sandbox 中创建的文件会被保留。
- 内存状态会被保留,包括正在运行的进程和变量。
- 网络连接会中断,直到 Sandbox 恢复。
- Sandbox 会一直保存,直到你恢复后终止它,或在暂停状态下直接终止它。
from ppio_sandbox import PPIO
ppio = PPIO()
sandbox = ppio.sandbox.create()
sandbox.commands.run("echo hello > /tmp/message.txt")
sandbox_id = sandbox.sandbox_id
sandbox.pause()
print('Sandbox paused', sandbox_id)
resumed = ppio.sandbox.connect(sandbox_id)
result = resumed.commands.run("cat /tmp/message.txt")
print(result.stdout)
resumed.kill()
import { PPIO } from 'ppio-sandbox'
const ppio = new PPIO()
const sandbox = await ppio.sandbox.create()
await sandbox.commands.run('echo hello > /tmp/message.txt')
const sandboxId = sandbox.sandboxId
await sandbox.pause()
console.log('Sandbox paused', sandboxId)
const resumed = await ppio.sandbox.connect(sandboxId)
const result = await resumed.commands.run('cat /tmp/message.txt')
console.log(result.stdout)
await resumed.kill()
# 暂停运行中的 Sandbox(别名:sandbox ps)
ppio sandbox pause <sandboxID>
# 恢复已暂停的 Sandbox(别名:sandbox rs)
ppio sandbox resume <sandboxID>
自动暂停与恢复
如果希望 Sandbox 在超时后自动暂停,并在检测到活动时(可选)自动恢复,可以使用生命周期设置。from ppio_sandbox import PPIO
ppio = PPIO()
sandbox = ppio.sandbox.create(
timeout=10 * 60,
lifecycle={
'on_timeout': 'pause',
'auto_resume': True,
},
)
sandbox.files.write('/home/user/hello.txt', 'hello from a paused sandbox')
sandbox.pause()
content = sandbox.files.read('/home/user/hello.txt')
print(content)
print(f'State after read: {sandbox.get_info().state}')
import { PPIO } from 'ppio-sandbox'
const ppio = new PPIO()
const sandbox = await ppio.sandbox.create({
timeoutMs: 10 * 60 * 1000,
lifecycle: {
onTimeout: 'pause',
autoResume: true,
},
})
await sandbox.files.write('/home/user/hello.txt', 'hello from a paused sandbox')
await sandbox.pause()
const content = await sandbox.files.read('/home/user/hello.txt')
console.log(content)
console.log(`State after read: ${(await sandbox.getInfo()).state}`)
# 创建超时后自动暂停、检测到活动时自动恢复的 Sandbox(分离模式)
ppio sandbox create base --timeout 10m --on-timeout pause --auto-resume -d
# Sandbox 暂停后,再次执行命令会触发自动恢复
ppio sandbox exec <sandbox_id> "cat /home/user/hello.txt"
# 查看 Sandbox 当前状态
ppio sandbox info <sandbox_id>
Web 服务器自动恢复
自动恢复非常适合预览环境和 Web 服务器。暂停过程会完整保存 Sandbox 的内存状态(包括正在运行的进程),因此恢复后 Web 服务器无需重新启动,依旧可以正常对外提供服务。from ppio_sandbox import PPIO
ppio = PPIO()
sandbox = ppio.sandbox.create(
timeout=5 * 60,
lifecycle={
'on_timeout': 'pause',
'auto_resume': True,
},
)
sandbox.commands.run('python3 -m http.server 3000', background=True)
host = sandbox.get_host(3000)
print(f'Preview URL: https://{host}')
import { PPIO } from 'ppio-sandbox'
const ppio = new PPIO()
const sandbox = await ppio.sandbox.create({
timeoutMs: 5 * 60 * 1000,
lifecycle: {
onTimeout: 'pause',
autoResume: true,
},
})
await sandbox.commands.run('python3 -m http.server 3000', { background: true })
const host = sandbox.getHost(3000)
console.log(`Preview URL: https://${host}`)
# 创建启用自动暂停与自动恢复的 Sandbox(分离模式)
ppio sandbox create base --timeout 5m --on-timeout pause --auto-resume -d
# 在 Sandbox 中后台启动 Web 服务器
ppio sandbox exec -b <sandbox_id> "python3 -m http.server 3000"