Por que o Docker é capaz de lidar com SIGTERM apenas com o comando & wait?

1

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?

    
por Mohammed Noureldin 15.08.2017 / 03:02

1 resposta

0

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.

    
por 18.06.2018 / 13:13

Tags