script - tuberias y filtros en linux
Supervisord-Redirigir la salida del proceso a la consola (2)
Estoy planeando ejecutar varios procesos usando supervisor y encuentre mi archivo supervisord.conf a continuación:
[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
Deseo redireccionar la salida estándar del proceso llamado bash a la consola de supervisor para que cuando comience a usar el supervisor
/usr/bin/supervisord
comando, pude ver los registros de proceso hijo. Cómo puedo hacer esto ? Intenté poner el atributo syslog para stdout_logfile pero no funcionó.
Actualizar
Vea la siguiente transcripción de una sesión de ejemplo. Supervisord seguramente captura el stdout del ping. Que más necesitas?
(svd)08/09 16:26 [nodakai@kaidev01] ~/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 [nodakai@kaidev01] ~/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>
Post original
En realidad, me quedé un poco perplejo al leer tu respuesta, porque era la función básica del demonio supervisord
. Tal vez hay algunos malentendidos acerca de lo que usted llamó "consola de supervisor"? La consola de bash que utiliza para iniciar el daemon supervisord
no imprimirá nada. serverurl = unix:///tmp/supervisor.sock
conectarse al demonio mediante el comando supervisorctl
través del socket de dominio Unix cuya ruta especificó con las serverurl = unix:///tmp/supervisor.sock
y file = /tmp/supervisor.sock
.
(svd)08/09 3:51 [nodakai@kaidev01] ~/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 [nodakai@kaidev01] ~/prog/svd$
Además, la interfaz gráfica de usuario web es muy conveniente. Agregue estas líneas a su archivo de configuración:
[inet_http_server]
port = 127.0.0.1:9001
Ver el documento oficial para más detalles.
Puede redireccionar la salida estándar del programa a la salida estándar del supervisor usando las siguientes opciones de configuración:
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
Explicación:
- Cuando un proceso abre
/dev/fd/1
(que es lo mismo que/proc/self/fd/1
), el sistema en realidad clona el descriptor de archivo # 1 (stdout) de ese proceso. El uso de este comostdout_logfile
porstdout_logfile
tanto, hace que elsupervisord
redirija lastdout_logfile
del programa a su propiastdout_logfile
. -
stdout_logfile_maxbytes=0
desactiva la rotación del archivo de registro, lo que obviamente no es significativo para stdout. Si no especifica esta opción, se producirá un error porque el valor predeterminado es 50 MB y el supervisor no es lo suficientemente inteligente como para detectar que el archivo de registro especificado no es un archivo normal.
Para más información:
http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html