我正在为Docker准备一个脚本,它只允许一个顶级进程,它应该接收信号,以便我们可以阻止它。
因此,我有这样一个脚本:一个应用程序写入syslog(本示例中的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完全取代了这个过程。
如果你幸运的话,那么你可以使用--pid=<number>选项来使用GNU coreutils的尾部命令。 大写的-F选项会让你安全的对抗日志的旋转。
tail --pid="$$" -F /var/log/syslog &
更多信息: http : //www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html