1

Я сталкиваюсь со странным поведением, у меня есть изображение Docker, у которого есть этот сценарий точки входа:

#!/bin/bash
trap " \
        service apache2 stop; \
        " SIGHUP SIGINT SIGTERM
trap "exit" ERR

service apache2 start

tail -f /var/log/apache2/access.log

Предыдущий скрипт НЕ обрабатывает SIGTERM, как предполагалось, он просто ничего не делает! (Я вижу, что в журнале Apache он был нечисто прерван), и Docker ждет 10 секунд, а затем уничтожает его.

Но когда я меняю последнюю строку на следующую, она работает отлично !

tail -f /var/log/apache2/access.log & wait

Ниже также не работает:

tail -f /var/log/apache2/access.log &

Может ли кто-нибудь объяснить это поведение для меня? Я не понял, почему это происходит. Что за магия позади & wait? И есть ли лучший способ сохранить работоспособность контейнера Docker и в то же время быть способным обрабатывать сигналы?

1 ответ1

0

Немного поздно, но bash не будет обрабатывать ловушку до тех пор, пока текущая команда не выйдет (tail), чего не произойдет, вопреки распространенному мнению. «Ждать» особенное и прерываемое.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .