![Daemontools - 分别记录 stderr 和 stdout](https://linux22.com/image/613285/Daemontools%20-%20%E5%88%86%E5%88%AB%E8%AE%B0%E5%BD%95%20stderr%20%E5%92%8C%20stdout.png)
根据我找到的文档,daemontools 推荐的捕获 stderr(或任何其他文件描述符)的方法是将其重定向到 stdout。如果您的服务有脚本log/run
,则守护进程的 stdout 将通过管道传输到该脚本。
这显然意味着 stderr 和 stdout 混合在记录器的输出中。有人在 daemontools 管理的进程中分别捕获 stdout 和 stderr 的经验吗?
答案1
对我来说这看起来像是一个 shell 问题“我如何将 stderr 和 stdout 分别发送到它们?”假设使用 bash 或 Bourne-ish 语法:
# 3 goes to wherever stdout is pointing
exec 3>&1
# send stdout of this cmd to FD 3, stderr somewhere else
eval $command 2>&1 1>&3 | sed 's/^/stderr from pipe: /'
# close FD 3
exec 3>&-