Фоновые команды
Параметр background в JavaScript/Python или метод Commands.Start в Go запускает команду без ожидания результата. Возвращённый объект содержит ID процесса и позволяет дождаться команды, отключиться от неё или остановить её.
import { Sandbox } from "@abox-dev/sdk";
const sandbox = await Sandbox.create();
try {
const command = await sandbox.commands.run(
"sleep 1; printf 'job finished' > /tmp/job.txt",
{ background: true, timeoutMs: 0 },
);
const pid = command.pid;
await command.disconnect();
const reconnected = await sandbox.commands.connect(pid);
await reconnected.wait();
console.log(await sandbox.files.read("/tmp/job.txt"));
} finally {
await sandbox.kill();
}Сохраните ID песочницы и процесса, если результат будет получать другой процесс приложения. Сначала подключитесь к песочнице, затем вызовите sandbox.commands.connect(pid).
Обработчики вывода относятся к текущему соединению. В Go метод ConnectWithOptions позволяет задать обработчики и потоковый режим при повторном подключении. Метод Close отсоединяет дескриптор и оставляет процесс работающим. Если вывод должен сохраниться после отключения, записывайте его в файл.
Для команды без собственного таймаута укажите timeoutMs: 0 в JavaScript или timeout=0 в Python. В Go контекст подключения управляет локальным потоком. Его отмена отсоединяет клиент без остановки удалённого процесса. Во всех языках задайте песочнице достаточное время жизни.