Pular para o conteúdo principal

run e shell

Uso​

rc run --stack <linguagem> (--code '<código>' | --file <arquivo>) [--stdin '<texto>'] [--timeout 5s]
FlagPadrãoDescrição
--stack—linguagem do catálogo
--code—código do arquivo principal
--file—lê o código de um arquivo local (substitui --code)
--stdinvazioentrada padrão do programa
--timeout10sduração no formato Go (500ms, 5s, 2m); máximo 300 s
--gpudesligadoVM com a GPU do host por Vulkan (virtio-gpu/Venus); só em stack com gpu no catálogo, senão E007. Veja GPU

O que acontece​

O run não usa pool: sobe uma VM nova (boot frio), executa o job e destrói a VM. Na máquina medida, um job Python levou ~240 ms no total, com 31–38 ms de execução.

A saída sai em streaming: cada pedaço aparece no terminal enquanto o programa roda, não só no fim.

  • O stdout do programa vai para o stdout.
  • O stderr do programa vai para o stderr, seguido de uma linha de resumo:
[status=success exit=0 exec=33ms total=241ms timeout=false]

(valores ilustrativos)

Buffer da linguagem​

O streaming entrega o que o programa escreve no pipe. Quando a saída não é um terminal, várias linguagens acumulam o stdout num buffer e só escrevem no fim (ou a cada bloco):

LinguagemComportamento no streaming
Pythonlinha a linha: o runner liga PYTHONUNBUFFERED=1 no modo streaming
Node.js, Go, Bash, shlinha a linha, sem configuração
C, C++ (printf), Ruby, Perlem bloco: chama fflush(stdout), $stdout.sync = true ou $| = 1 no programa
stderrsem buffer em todas

Código de saída​

Situaçãorc
programa saiu com 00
programa saiu com código ≠ 0, falhou ao compilar ou estourou o timeout1
job recusado (linguagem, limites) ou falha de infraestrutura1, com a mensagem de erro

Exemplos​

# Python com stdin
rc run --stack python --code 'print(input().upper())' --stdin 'olá'

# Arquivo local
rc run --stack go --file ./main.go

# Timeout curto
rc run --stack bash --code 'sleep 10' --timeout 2s

Pelo Taskfile:

task run -- --stack python --code 'print(1)'

shell​

rc shell --stack python [--gpu]
task shell -- --stack python

Abre um shell interativo numa VM nova da stack, com a mesma imagem dos jobs: root read-only, sem rede e /tmp gravável. A VM some no exit.

  • Num terminal, o guest recebe um TTY de verdade (console virtio no lugar do console implícito) e o terminal do host fica em modo raw durante a sessão: Ctrl+C interrompe só o comando no guest, e o tamanho da janela chega ao guest (stty size).
  • Com stdin por pipe, o console é o normal, sem TTY: echo 'python3 -V' | rc shell --stack python funciona.
  • É bash se a imagem tiver; nas imagens Alpine, sh.

Para um shell que guarda o que você instala, use uma máquina: rc machine run -it --stack python (some no fim) ou rc machine shell numa máquina ligada. Veja machine.

Pré-requisito​

A imagem da linguagem precisa estar construída (rc image build --stack <l>); sem ela, o job é recusado com E006.