supervisord:是否有可能将subprocessstdoutredirect回supervisord?

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

对于stderr有subprocessredirect_stderr=true选项,是否有可能redirect到supervisord子处理stdout不知道怎么处理实际的日志文件?

您可以使用以下configuration选项将程序的stdoutredirect到supervisor的stdout:

 stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 

说明:

  • 当进程打开/dev/fd/1 (与/proc/self/fd/1 )时,系统实际上会克隆该进程的文件描述符#1(stdout)。 因此,使用这个stdout_logfile会导致supervisord将程序的stdoutredirect到它自己的stdout。
  • stdout_logfile_maxbytes=0禁用日志文件的旋转,这对stdout显然没有意义。 不指定此选项会导致错误,因为默认值是50MB,而且pipe理程序不够智能,无法检测到指定的日志文件不是常规文件。

了解更多信息:

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