Supervisord不会显示来自进程的stdout
尝试在docker中与监督人员捕获我的应用程序的日志。
这是我的supervisord.conf:
[supervisord]
logfile=/dev/null
nodaemon=true
[program:autofs]
command=automount -f
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
[program:split-pdf]
command=bin/split-pdf-server
directory=/root/split-pdf
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
启动容器后,一切正常,我可以看到我的应用程序运行的结果(它在网络共享上创建PDF文件)
但日志显示我的应用程序没有输出:
015-07-02 00:39:26,119 CRIT Supervisor running as root (no user in config file)
2015-07-02 00:39:26,124 INFO supervisord started with pid 5
2015-07-02 00:39:27,127 INFO spawned: 'split-pdf' with pid 8
2015-07-02 00:39:27,130 INFO spawned: 'autofs' with pid 9
2015-07-02 00:39:28,132 INFO success: split-pdf entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2015-07-02 00:39:28,132 INFO success: autofs entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
这是我在连接到码头集装箱时看到的唯一输出。
我在Ubuntu 15.04 docker 1.7.0上
这不是这个问题的重复,因为我在容器中运行多个进程。
事实证明一切正常,但有一些延迟。 当我试图为其他产生更多日志消息的应用程序创建容器时,消息开始出现在日志文件中,但延迟。
我测试它的第一个应用程序在日志中每个任务只有2行,我猜在缓冲区开始刷新日志文件之前需要填充某种缓冲区。
这与管道缓冲有关。
我可以通过在非缓冲模式下运行python来绕过这个问题:
$ docker run -e PYTHONUNBUFFERED=1 imagename
有关此问题的讨论,请参阅supervisor-stdout问题#10。
链接地址: http://www.djcxy.com/p/86233.html