Supervisord - 将进程stdout重定向到控制台

Kar*_*ikJ 31 linux child-process supervisord

我打算使用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
Run Code Online (Sandbox Code Playgroud)

我希望将名为bash的进程的stdout重定向到supervisor控制台,以便在我启动supervisor时使用

/usr/bin/supervisord
Run Code Online (Sandbox Code Playgroud)

命令,我可以看到子进程日志.我怎样才能做到这一点 ?我尝试将syslog用于stdout_logfile属性但它不起作用.

And*_*hen 77

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

stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
Run Code Online (Sandbox Code Playgroud)

说明:

  • 当进程打开/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

  • 我发现有趣的是分享了/ proc / self / fd / 1实际上是到/ dev / stdout的符号链接,当进程打开该文件时,系统实际上克隆了该进程的文件描述符#1(stdout)。 (4认同)
  • 实际上,“/dev/stdout”是“/proc/self/fd/1”的符号链接,“/dev/fd/1”是进程正在通信的任何“/dev/pts/#”的符号链接,但是一切都大致相同。 (2认同)