Um pouquinho tardio, mas o bash não irá processar a armadilha até que o comando atual tenha saído (cauda), o que não acontecerá, ao contrário da crença popular. 'wait' é especial e é interrompível.
Estou enfrentando um comportamento estranho. Tenho uma imagem do Docker com este script de ponto de entrada:
#!/bin/bash
trap " \
service apache2 stop; \
" SIGHUP SIGINT SIGTERM
trap "exit" ERR
service apache2 start
tail -f /var/log/apache2/access.log
O script anterior faz NOT manipular o SIGTERM como supostamente, ele simplesmente não faz nada! (Eu posso ver isso no log do Apache, que foi terminado sem limpeza), e o Docker espera por 10 segundos e depois o mata.
Mas quando eu mudo a última linha para o seguinte, funciona perfeitamente !
tail -f /var/log/apache2/access.log & wait
O seguinte também fez NÃO funcionar:
tail -f /var/log/apache2/access.log &
Alguém poderia explicar esse comportamento para mim? Eu não entendi porque isso está acontecendo. O que é essa mágica por trás de & wait
? E existe alguma maneira melhor de manter o contêiner do Docker rodando e, ao mesmo tempo, ser capaz de lidar com os sinais?
Um pouquinho tardio, mas o bash não irá processar a armadilha até que o comando atual tenha saído (cauda), o que não acontecerá, ao contrário da crença popular. 'wait' é especial e é interrompível.
Tags docker