Я готовлю сценарий для Docker, который разрешает только один процесс верхнего уровня, который должен получать сигналы, чтобы мы могли его остановить.
Поэтому у меня есть такой сценарий: одно приложение записывает в системный журнал (сценарий bash в этом примере), а другое просто печатает его.
#! /usr/bin/env bash
set -eu
tail -f /var/log/syslog &
exec bash -c 'while true ; do logger aaaaaaaaaaaaaaaaaaa ; sleep 1 ; done'
Почти решено: когда процесс верхнего уровня bash
получает SIGTERM - он существует, но tail -f
продолжает бежать.
Как мне проинструктировать tail -f
выйти при выходе из родительского процесса? Например. он также должен получить сигнал.
Примечание: нельзя использовать ловушки bash, так как exec
в последней строке полностью заменяет процесс.
Если вам повезет ^ Wusing tail command из GNU coreutils, вы можете использовать --pid=<number>
вариант. Столица -F
вариант защитит вас от ротации журнала.
tail --pid="$$" -F /var/log/syslog &
Больше информации: http://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html