> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Persistencia de sandbox

export const SandboxConfigHint = () => {
  if (typeof document === "undefined") {
    return null;
  } else {
    return <Note>Before running the example code in this document, please ensure you have properly configured environment variables. For details, please refer to <a href="/docs/es/guides/sandbox-your-first-agent-sandbox#configure-environment-variables">Configure Environment Variables</a>.</Note>;
  }
};

La persistencia de sandbox te permite pausar un sandbox y reanudarlo más tarde con el mismo sistema de archivos y estado en memoria. Esto es útil para tareas de agentes de larga duración, aplicaciones interactivas y flujos de trabajo que necesitan sobrevivir a períodos de inactividad sin mantener activos los recursos de cómputo.

Cuando se pausa un sandbox:

* Los archivos creados en el sandbox se conservan.
* El estado en memoria se conserva, incluidos los procesos en ejecución y las variables.
* Las conexiones de red se interrumpen hasta que el sandbox se reanuda.
* El sandbox permanece almacenado hasta que lo reanudes y lo finalices, o lo finalices mientras está pausado.

Para la pausa automática por timeout y la reanudación automática con actividad, consulta [Pausa y reanudación automáticas](/docs/es/guides/sandbox-auto-resume). Para el timeout por inactividad, consulta [Timeout por inactividad](/docs/es/guides/sandbox-idle-timeout).

<SandboxConfigHint />

<Warning>
  Ten en cuenta:

  * Se tardan aproximadamente 4 segundos por cada 1 GB de RAM en pausar el sandbox.
  * Se tarda aproximadamente 1 segundo en reanudar el sandbox.
  * Los datos de un sandbox pausado se conservan hasta que llamas explícitamente al método `kill`.
</Warning>

## Pausar un sandbox

Puedes llamar al método `pause` cuando quieras guardar el estado actual.

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  await sandbox.commands.run('echo hello > /tmp/message.txt')

  const sandboxId = sandbox.sandboxId
  await sandbox.pause()

  console.log('Sandbox paused', sandboxId)
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.create()
  sandbox.commands.run("echo hello > /tmp/message.txt")

  sandbox_id = sandbox.sandbox_id
  sandbox.pause()

  print('Sandbox paused', sandbox_id)
  ```
</CodeGroup>

## Reanudar un sandbox

Usa el ID del sandbox guardado para conectarte de nuevo. Si el sandbox está pausado, puedes usar el método `connect` para reanudarlo antes de devolver el resultado.

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.connect(sandboxId)
  const result = await sandbox.commands.run('cat /tmp/message.txt')
  console.log(result.stdout)

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.connect(sandbox_id)
  result = sandbox.commands.run("cat /tmp/message.txt")
  print(result.stdout)

  sandbox.kill()
  ```
</CodeGroup>

Puedes pasar un nuevo `timeout` al reconectarte.

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.connect(sandboxId, { timeoutMs: 600_000 })

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.connect(sandbox_id, timeout=600)

  sandbox.kill()
  ```
</CodeGroup>

Para un sandbox en ejecución, el timeout se actualiza solo cuando el nuevo timeout es más largo que el existente. Para un sandbox pausado, el timeout se aplica después de que se reanuda.

## Listar sandboxes pausados

Puedes usar el método `list` con un filtro de estado para encontrar sandboxes pausados. Puedes encontrar más información sobre cómo usar el método en [Listar sandboxes](/docs/es/guides/sandbox-list).

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const paginator = Sandbox.list({
    query: {
      state: ['paused'],
    },
  })

  while (paginator.hasNext) {
    const items = await paginator.nextItems()
    for (const info of items) {
      console.log(info.sandboxId, info.state, info.metadata)
    }
  }
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox
  from novita_sandbox.core import SandboxQuery, SandboxState

  paginator = Sandbox.list(
      query=SandboxQuery(state=[SandboxState.PAUSED])
  )

  while paginator.has_next:
      for info in paginator.next_items():
          print(info.sandbox_id, info.state, info.metadata)
  ```
</CodeGroup>

Los filtros de metadatos son útiles cuando necesitas encontrar sandboxes creados por un usuario, una sesión o un trabajo específicos.

## Eliminar un sandbox pausado

Los sandboxes pausados permanecen almacenados hasta que los eliminas. Puedes usar el método `kill` para eliminar sandboxes pausados que ya no necesitas.

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  await Sandbox.kill(sandboxId)
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  Sandbox.kill(sandbox_id)
  ```
</CodeGroup>

## Persistencia vs. snapshots

La persistencia sirve para continuar con el mismo sandbox más adelante. Úsala cuando te importen el ID exacto del sandbox y el estado de ejecución actual.

Los snapshots sirven para crear estados guardados reutilizables. Usa un snapshot cuando quieras iniciar uno o más sandboxes nuevos desde el mismo sistema de archivos y estado en memoria capturados.

Para estados reutilizables, consulta [Snapshot de sandbox](/docs/es/guides/sandbox-snapshot).

## Red

Si pausas un sandbox que tiene un servicio en ejecución, el servicio deja de ser accesible desde fuera del sandbox y todos los clientes conectados se desconectan. Después de reanudar el sandbox, el servicio vuelve a ser accesible, pero los clientes deben reconectarse.
