web-dev-qa-db-fra.com

Supervisord - Rediriger la sortie standard du processus vers la console

Je prévois d'exécuter plusieurs processus à l'aide de superviseur et veuillez trouver mon fichier supervisord.conf ci-dessous:

[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

Je souhaite rediriger la sortie standard du processus nommé bash vers la console du superviseur afin que lorsque je démarre le superviseur en utilisant

/usr/bin/supervisord

commande, je pouvais voir les journaux de processus enfant. Comment puis-je faire ceci ? J'ai essayé de mettre syslog pour l'attribut stdout_logfile mais cela n'a pas fonctionné.

26
KarthikJ

Vous pouvez rediriger la sortie standard du programme vers la sortie standard du superviseur à l'aide des options de configuration suivantes:

stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0

Explication:

  • Lorsqu'un processus s'ouvre /dev/fd/1 (qui est identique à /proc/self/fd/1), le système clone en fait le descripteur de fichier # 1 (stdout) de ce processus. Utiliser ceci comme stdout_logfile oblige donc supervisord à rediriger la sortie standard du programme vers sa propre sortie standard.
  • stdout_logfile_maxbytes=0 désactive la rotation des fichiers journaux, ce qui n'est évidemment pas significatif pour stdout. Ne pas spécifier cette option entraînera une erreur car la valeur par défaut est 50 Mo et le superviseur n'est pas assez intelligent pour détecter que le fichier journal spécifié n'est pas un fichier normal.

Pour plus d'informations:

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

72
Andreas Veithen

Mise à jour

Voir la transcription ci-dessous d'un exemple de session. Supervisord capture sûrement la sortie standard du ping. De quoi d'autres avez-vous besoin?

(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> 

Message d'origine

J'étais en fait un peu perplexe de lire votre réponse, car c'était la fonction de base du démon supervisord. Peut-être y a-t-il des malentendus à propos de ce que vous avez appelé la "console supervord" ?? La console bash que vous utilisez pour démarrer le démon supervisord n'imprimera rien. Vous devez vous connecter au démon par la commande supervisorctl via le socket de domaine Unix dont vous avez spécifié le chemin avec le serverurl = unix:///tmp/supervisor.sock et file = /tmp/supervisor.sock lignes.

(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$

De plus, l'interface graphique Web est très pratique. Ajoutez ces lignes à votre fichier de configuration:

[inet_http_server]
port = 127.0.0.1:9001

Voir le document officiel pour les détails.

0
nodakai