当前位置: 首页 > 知识库问答 >
问题:

supervisord:是否可以将子进程stdout重定向回supervisord?

夏高朗
2023-03-14

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

对于stderr,子进程redirect_stderr=true选项,是否可以以某种方式将子进程stdout重定向回supervisord,而不处理实际的日志文件?

共有1个答案

卫学真
2023-03-14

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

stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0

说明:

  • 当进程打开/dev/fd/1(与/proc/self/fd/1相同)时,系统实际上克隆了该进程的文件描述符#1(stdout)。因此,将其用作stdout_logfile会导致supervisord将程序的stdout重定向到它自己的stdout。
  • stdout_logfile_maxbytes=0禁用日志文件循环,这显然对stdout没有意义。不指定此选项将导致错误,因为默认值为50MB,而supervisor不够聪明,无法检测指定的日志文件不是常规文件。

有关更多信息:

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

 类似资料:
  • 我希望将名为bash的进程的stdout重定向到supervisor控制台,以便在启动supervisor时使用 命令,我可以看到子进程日志。我怎么能这么做?我尝试将syslog用于stdout_logfile属性,但它不起作用。

  • 问题内容: 我想将子进程的stderr输出重定向到stdout。常量应该这样做,不是吗? 然而, 确实 输出了一些东西。为什么会这样,如何在stdout上得到错误消息? 问题答案: 仔细阅读源代码即可得出答案。特别是,该文档在显示以下内容时会产生误导: 表示(…)的特殊值表示标准错误应与标准输出进入同一 句柄 。 由于在求值时stdout设置为“默认”(技术上来说),因此stderr也设置为“默认

  • 问题内容: 我想从Groovy程序中执行foo.bat,并将生成的进程的输出重定向到stdout。Java或Groovy代码示例都可以。 foo.bat可能需要花费几分钟才能运行并生成大量输出,因此我希望在生成后立即查看输出,而不是必须等到该过程完成之后才能立即查看所有输出。 问题答案: 它使用一个类读取执行的程序生成的所有输出,并将其显示在其自己的stdout中。

  • 问题内容: 我有一个网站,所有请求都通过(无提示)被无提示地重定向到,然后PHP用于显示正确的页面(通过解析)。 我想知道是否也可以将POST数据提交到假地址? 我目前有这样的表格… 我的规则是 我的支票工作正常。 但是,这似乎删除了应该发送给它的所有POST数据。 有没有办法保留帖子数据?我不想使用GET,因为它不能发送太多信息,尽管使用简单的查询表可能不会出现问题。 这是我重定向到的 问题答案

  • 问题内容: 我正在用Go编写程序,该程序执行类似程序的服务器(也就是Go)。现在,我想在启动父程序的终端窗口中获​​得子程序的标准输出。一种方法是使用函数,但这仅在进程退出后才输出标准输出。(这是一个问题,因为这个类似于服务器的程序运行了很长时间,并且我想读取日志输出) 变量是,我不知道该如何使用它来完成任务,因此我在网络上找不到有关此主题的任何有用信息。 对代码的解释:取消注释该函数以获取要编译

  • 问题内容: 我在cyberciti.biz的评论中看到了这个有趣的问题。 我发现我什至找不到在sh的单行命令中执行此操作的灵活方法。 到目前为止,我对解决方案的想法是: 但是您会看到,这不是同步的,而且致命的是,它是如此丑陋。 欢迎与您分享这个想法。:) 问题答案: 你要 这里的顺序很重要。假设stdin(fd 0),stdout(fd 1)和stderr(fd 2)最初都连接到tty,因此 首先