我正在为 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
在最后一行完全替换了进程。
如果你很幸运^W使用来自 GNU coreutils 的 tail 命令,你可以使用
--pid=<number>
选项。大写-F
选项将使您免受日志轮换的影响。更多信息:http ://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html