Supervisord - 将进程的标准输出重定向到控制台

58

我计划使用Supervisor运行多个进程,请查看下面的supervisord.conf文件:

[supervisord]

[program:bash]
command=xyz
stdout_logfile =/tmp/bash.log
redirect_stderr=true

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[unix_http_server]
file=/tmp/supervisor.sock ; path to your socket file

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

我希望将名为bash的进程的标准输出重定向到supervisor控制台,以便当我使用

/usr/bin/supervisord

我可以看到子进程的日志,请问如何做到这一点?我尝试将syslog放入stdout_logfile属性中,但没有起作用。


你能澄清一下你的问题吗?也许是因为你在command =行中没有指定bash - nodakai
xyz 可以是任何命令。我面临的问题是,我正在尝试在 supervisord 控制台中查看子进程日志。例如,如果命令是列表命令,则希望在 supervisord 控制台中看到其输出。 - cucucool
1个回答

117

您可以使用以下配置选项将程序的stdout重定向到supervisor的stdout:

stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0

说明:

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

更多信息请参见:

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


8
当一个进程打开/proc/self/fd/1文件时,实际上是打开了符号链接/dev/stdout。此时,系统会复制该进程的文件描述符#1(即标准输出stdout)。 - Carlos Quijano
1
实际上,/dev/stdout 是指向 /proc/self/fd/1 的符号链接,而 /dev/fd/1 则是指向进程正在通信的 /dev/pts/# 的符号链接,但总体来说它们的作用都类似。 - mVChr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接