Exécution de commandes dans un bac à sable

Exécuter les commandes de l'interpréteur de commandes, attendre la sortie, diffuser les événements et annuler le travail dans un bac à sable en cours d'exécution.

Commencez par un bac à sable à l'état RUNNING. Définissez votre profil d'authentification de session, votre région et votre ID bac à sable :

profile_name="DEFAULT"
region="us-chicago-1"
sandbox_id="SANDBOX_ID"

Exécution d'une commande et attente de sortie

Utilisez run-and-wait pour une commande dont vous voulez obtenir le résultat avant de continuer :

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run-and-wait \
  --sandbox-id "$sandbox_id" \
  --command "pwd && ls -la /workspace" \
  --timeout PT5M

Examinez l'ID commande, la sortie standard, l'erreur standard et le code de sortie renvoyés. Un code de sortie différent de zéro indique que la commande a signalé une erreur.

Sortie de diffusion en continu

Utilisez run-and-stream pour lire la sortie lors de l'exécution de la commande. L'exemple suivant présente trois messages :

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run-and-stream \
  --sandbox-id "$sandbox_id" \
  --command "sh -lc 'for i in 1 2 3; do echo message-\$i; sleep 1; done'" \
  --timeout PT5M \
  --file -

Démarrer une commande de manière asynchrone

Utilisez run pour démarrer une commande et enregistrer son ID pour l'extraction ou l'annulation de la sortie :

command_id=$(oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run \
  --sandbox-id "$sandbox_id" \
  --command "sleep 30" \
  --timeout PT2M \
  --query 'data.id' --raw-output)

Extraire la sortie capturée :

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command get-output \
  --sandbox-id "$sandbox_id" \
  --command-id "$command_id" \
  --from-seq 0

Ou diffusez des événements pour la commande existante :

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command stream \
  --sandbox-id "$sandbox_id" \
  --command-id "$command_id" \
  --from-seq 0

La valeur de séquence 0 commence l'extraction depuis le début.

Annuler une commande

Pour demander l'arrêt d'une commande en cours d'exécution, envoyez SIGTERM :

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command cancel \
  --sandbox-id "$sandbox_id" \
  --command-id "$command_id" \
  --signal SIGTERM

L'annulation d'une commande et l'arrêt du bac à sable sont des opérations distinctes. Voir Arrêt d'un bac à sable pour mettre fin à l'exécution.

Exécution d'un service sur un port publié

Lors de la création du bac à sable, utilisez --publish-ports pour exposer le port dont votre service a besoin. Par exemple :

project_id="PROJECT_OCID"

sandbox_id=$(oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox create \
  --project-id "$project_id" \
  --display-name preview-sandbox \
  --runtime python-3.11 \
  --shape SMALL \
  --publish-ports '["8080"]' \
  --expiration-duration PT30M \
  --wait-for-state RUNNING \
  --query 'data.id' --raw-output)
Important

Les ports publiés n'ont pas d'authentification d'application fournie par la plate-forme. Toute personne qui obtient une URL publiée peut accéder à ce port pendant l'exécution du bac à sable, sauf si votre application restreint l'accès. Ajoutez l'authentification si nécessaire et publiez uniquement les ports dont votre charge de travail a besoin.

Pour une prévisualisation temporaire contenant uniquement des fichiers non sensibles, démarrez un serveur dans un répertoire dédié :

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run \
  --sandbox-id "$sandbox_id" \
  --command "mkdir -p /workspace/preview && python3 -m http.server 8080 --bind 0.0.0.0 --directory /workspace/preview" \
  --timeout PT30M

Obtenez le bac à sable et lisez l'entrée published-ports dont key est 8080. Sa valeur value est l'URL du service :

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox get \
  --sandbox-id "$sandbox_id"

Attendez que le serveur soit prêt avant de vous connecter. Arrêtez la commande ou le bac à sable lorsque vous avez terminé la prévisualisation.