Supervisord - перенаправление процесса stdout на консоль

Я планирую запустить несколько процессов с помощью супервизора, и, пожалуйста, найдите файл 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

Я хочу перенаправить stdout процесса с именем bash на консоль диспетчера, чтобы при запуске супервизора с использованием

/usr/bin/supervisord

я мог видеть журналы дочерних процессов. Как я могу это сделать? Я попытался поставить syslog для атрибута stdout_logfile, но это не сработало.

Ответы

Ответ 1

Вы можете перенаправить программу stdout на супервизор 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. Не указывая эту опцию, это приведет к ошибке, поскольку значение по умолчанию составляет 50 МБ, а супервизор недостаточно умен, чтобы обнаружить, что указанный файл журнала не является обычным файлом.

Для получения дополнительной информации:

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

Ответ 2

Update

См. нижеприведенную стенограмму из примера сеанса. Супервизор наверняка захватывает stdout ping. Что еще вам нужно?

(svd)08/09 16:26 [[email protected]] ~/prog/svd$ cat supervisord.conf             
[supervisord]                                   

[program:ping]
command=ping 8.8.8.8
stdout_logfile =/tmp/ping.log
redirect_stderr=true

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

[unix_http_server]
file = /tmp/supervisor.sock

[inet_http_server]
port = 127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
(svd)08/09 16:26 [[email protected]] ~/prog/svd$ supervisorctl -c supervisord.conf
ping                             RUNNING   pid 27365, uptime 0:02:02
supervisor> tail ping
: icmp_req=97 ttl=48 time=59.1 ms
64 bytes from 8.8.8.8: icmp_req=98 ttl=48 time=59.2 ms
64 bytes from 8.8.8.8: icmp_req=99 ttl=48 time=59.1 ms
64 bytes from 8.8.8.8: icmp_req=100 ttl=48 time=59.4 ms
64 bytes from 8.8.8.8: icmp_req=101 ttl=48 time=59.8 ms
64 bytes from 8.8.8.8: icmp_req=102 ttl=48 time=59.2 ms
64 bytes from 8.8.8.8: icmp_req=103 ttl=48 time=59.4 ms
64 bytes from 8.8.8.8: icmp_req=104 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=105 ttl=48 time=59.6 ms
64 bytes from 8.8.8.8: icmp_req=106 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=107 ttl=48 time=60.1 ms
64 bytes from 8.8.8.8: icmp_req=108 ttl=48 time=59.4 ms
64 bytes from 8.8.8.8: icmp_req=109 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=110 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=111 ttl=48 time=59.4 ms
64 bytes from 8.8.8.8: icmp_req=112 ttl=48 time=59.1 ms
64 bytes from 8.8.8.8: icmp_req=113 ttl=48 time=59.3 ms
64 bytes from 8.8.8.8: icmp_req=114 ttl=48 time=59.2 ms
64 bytes from 8.8.8.8: icmp_req=115 ttl=48 time=59.4 ms
64 bytes from 8.8.8.8: icmp_req=116 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=117 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=118 ttl=48 time=59.6 ms
64 bytes from 8.8.8.8: icmp_req=119 ttl=48 time=59.4 ms
64 bytes from 8.8.8.8: icmp_req=120 ttl=48 time=59.4 ms
64 bytes from 8.8.8.8: icmp_req=121 ttl=48 time=59.2 ms
64 bytes from 8.8.8.8: icmp_req=122 ttl=48 time=59.3 ms
64 bytes from 8.8.8.8: icmp_req=123 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=124 ttl=48 time=59.5 ms
64 bytes from 8.8.8.8: icmp_req=125 ttl=48 time=59.3 ms

supervisor> 

Оригинальное сообщение

Я был немного озадачен, чтобы прочитать ваш ответ, потому что это была основная функция демона supervisord. Возможно, есть некоторые недоразумения в отношении того, что вы назвали "консоль супервизора"? Консоль bash, которую вы используете для запуска демона supervisord, ничего не печатает. Вам нужно подключиться к демону командой supervisorctl через сокет домена Unix, путь которого вы указали в строках serverurl = unix:///tmp/supervisor.sock и file = /tmp/supervisor.sock.

(svd)08/09 3:51 [[email protected]] ~/prog/svd$ supervisorctl -c supervisord.conf
foo                              FATAL     Exited too quickly (process log may have details)
supervisor> help

default commands (type help <topic>):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

supervisor> tail foo
-rw-r-- 1 nodakai nodakai 1521  8月  9 03:43 supervisord.log
-rw-r--r-- 1 nodakai nodakai    6  8月  9 03:43 supervisord.pid
合計 32
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:10 bin
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:07 include
drwxrwxr-x 3 nodakai nodakai 4096  8月  9 03:07 lib
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:07 local
-rw-rw-r-- 1 nodakai nodakai  346  8月  9 03:43 supervisord.conf
-rw-rw-r-- 1 nodakai nodakai  340  8月  9 03:42 supervisord.conf~
-rw-rw-r-- 1 nodakai nodakai 1651  8月  9 03:43 supervisord.log
-rw-r--r-- 1 nodakai nodakai    6  8月  9 03:43 supervisord.pid
合計 32
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:10 bin
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:07 include
drwxrwxr-x 3 nodakai nodakai 4096  8月  9 03:07 lib
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:07 local
-rw-rw-r-- 1 nodakai nodakai  346  8月  9 03:43 supervisord.conf
-rw-rw-r-- 1 nodakai nodakai  340  8月  9 03:42 supervisord.conf~
-rw-rw-r-- 1 nodakai nodakai 1781  8月  9 03:43 supervisord.log
-rw-r--r-- 1 nodakai nodakai    6  8月  9 03:43 supervisord.pid
合計 32
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:10 bin
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:07 include
drwxrwxr-x 3 nodakai nodakai 4096  8月  9 03:07 lib
drwxrwxr-x 2 nodakai nodakai 4096  8月  9 03:07 local
-rw-rw-r-- 1 nodakai nodakai  346  8月  9 03:43 supervisord.conf
-rw-rw-r-- 1 nodakai nodakai  340  8月  9 03:42 supervisord.conf~
-rw-rw-r-- 1 nodakai nodakai 1911  8月  9 03:43 supervisord.log
-rw-r--r-- 1 nodakai nodakai    6  8月  9 03:43 supervisord.pid

supervisor> status
foo                              FATAL     Exited too quickly (process log may have details)
supervisor> quit
(svd)08/09 3:51 [[email protected]] ~/prog/svd$

Кроме того, веб-интерфейс очень удобен. Добавьте эти строки в файл конфигурации:

[inet_http_server]
port = 127.0.0.1:9001

Подробнее см. официальный документ.