Skip to content
Latchkey

O Que É um Trap? Executando Limpeza em Sinais e na Saída

Um trap é um mecanismo do shell que executa um comando especificado quando o shell recebe um sinal específico ou está prestes a sair, usado para limpeza.

Quando um script é interrompido ou termina, você frequentemente quer fazer limpeza: apagar arquivos temporários, parar um servidor em background, remover um lock. O comando trap permite registrar código que roda nesses eventos. No CI, os traps garantem que a limpeza aconteça mesmo quando um step falha ou é cancelado no meio.

O que é um trap

O builtin trap associa um comando a um ou mais sinais ou ao evento especial EXIT. Quando esse sinal chega ou o shell sai, o comando registrado no trap roda primeiro.

Um exemplo básico

Escrever trap 'rm -f "$tmpfile"' EXIT garante que o arquivo temporário seja removido sempre que o script terminar, quer ele tenha sucesso, falhe ou seja interrompido. A limpeza fica centralizada em um único lugar.

Alvos comuns de trap

  • EXIT: roda sempre que o shell sai, por qualquer motivo.
  • SIGINT: trata Ctrl-C / interrupção.
  • SIGTERM: trata uma requisição educada de término.
  • ERR: roda quando um comando falha (com set -e).

Por que os traps importam

Sem um trap, uma falha precoce pode deixar para trás arquivos temporários, processos em execução ou locks. Um trap garante que a lógica de teardown rode uma vez, não importa como o script termine, o que mantém os ambientes limpos.

Traps no CI

Steps de CI que iniciam serviços em background ou criam recursos temporários deveriam fazer trap de EXIT para derrubá-los. Quando um job é cancelado ou sofre timeout, o runner envia um sinal; fazer trap dele permite que o step faça flush dos logs ou pare serviços antes que o ambiente desapareça.

Teardown limpo em runners gerenciados

Nos runners do Latchkey, a plataforma envia um sinal de término antes de fazer o teardown. Um trap em EXIT ou SIGTERM dá ao seu step a chance de parar um servidor em background ou salvar artifacts de forma limpa quando um run é encerrado antes do tempo.

Principais conclusões

  • Um trap executa um comando quando o shell recebe um sinal ou sai.
  • trap ... EXIT centraliza a limpeza que roda não importa como um script termine.
  • No CI, os traps garantem que arquivos temporários e serviços em background sejam limpos de forma confiável.

Guias relacionados