supervisord:是否可以将subprocess stdout重定向回supervisord?

时间:2014-10-04 12:15:41

标签: docker supervisord coreos

我正在使用supervisord作为Docker容器的入口点,如https://docs.docker.com/articles/using_supervisord/中所述, 我希望将所有日志写入stdout,以便我可以利用内置工具,如docker logs或systemd的日志,尤其是在CoreOS上运行容器时。

对于stderr,子进程有redirect_stderr=true个选项, 有可能以某种方式将子进程stdout重定向回supervisord并且不处理实际的日志文件吗?

1 个答案:

答案 0 :(得分:3)

您可以使用以下配置选项将程序的标准输出重定向到主管的标准输出:

stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0

说明:

  • 当进程打开/dev/fd/1(与/proc/self/fd/1相同)时,系统实际克隆该进程的文件描述符#1(stdout)。因此,将此stdout_logfile用作supervisord会将程序的标准输出重定向到其自己的标准输出。
  • stdout_logfile_maxbytes=0禁用日志文件轮换,这显然对stdout没有意义。不指定此选项将导致错误,因为默认值为50MB且supervisor不够智能,无法检测到指定的日志文件不是常规文件。

了解更多信息:

http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html