Перейти к содержимому

Копирование песочницы

Копирование один раз сохраняет работающую песочницу и сразу запускает одну или несколько независимых копий. У каждой копии свой идентификатор и время работы. В момент запуска файлы, процессы и память совпадают с исходной песочницей, после чего среды изменяются независимо.

mjs
import { Sandbox } from "@abox-dev/sdk";

const sandbox = await Sandbox.create();
const forks = [];

try {
  await sandbox.files.write("/tmp/shared.txt", "state copied to each fork");

  const results = await sandbox.fork({ count: 2 });
  for (const result of results) {
    if (result instanceof Sandbox) {
      forks.push(result);
      console.log(await result.files.read("/tmp/shared.txt"));
    } else {
      console.error(`Fork failed: ${result.message}`);
    }
  }
} finally {
  await Promise.all(forks.map((fork) => fork.kill()));
  await sandbox.kill();
}

В результате есть отдельный элемент для каждой запрошенной копии. Успешный элемент содержит подключённый Sandbox, неуспешный — ошибку. Обрабатывайте все элементы, чтобы частичный сбой не скрыл уже запущенные копии.

Во время сохранения состояния исходная песочница ненадолго ставится на паузу. Потоки и внешние соединения после этого нужно подключить заново. Если состояние нужно сохранить для будущих запусков, используйте снапшоты.