如https://docs.docker.com/articles/using_supervisord/所述,我将 super 用户用作Docker容器的入口点,
我希望所有日志都写入stdout,以便可以利用docker logs
或systemd的日志之类的内置工具,尤其是在CoreOS上运行容器时。
对于stderr,子流程有redirect_stderr=true
选项,
是否有可能以某种方式将子进程stdout重定向回supervisor,而不处理实际的日志文件?
最佳答案
您可以使用以下配置选项将程序的标准输出重定向到主管的标准输出:
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,并且 super 用户不够智能,无法检测到指定的日志文件不是常规文件。 想要查询更多的信息:
http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html