Supervisor: Crash si el directorio de registro no existe

Creado en 3 jul. 2015  ·  4Comentarios  ·  Fuente: Supervisor/supervisor

Informado en los comentarios del número 120:

No sé si eso se resolvió de alguna manera en la rama maestra, pero en la versión 3.1.1, alguien eliminó accidentalmente un directorio de registro en nuestro servidor, y el supervisor simplemente dejó de funcionar, llevándose todos los demás programas consigo, no solo el que tenía falta el directorio de registro.

logging

Comentario más útil

Corregido en fd22ca89ff353fbe92845e9d2517645e6cf149ac. Esta corrección se incluirá en Supervisor 3.2.

A continuación, se explica cómo duplicarlo y verificar que esté arreglado. Mínimo supervisord.conf :

[supervisord]
logfile = /tmp/supervisord.log

[inet_http_server]
port = 127.0.0.1:9001

[supervisorctl]
serverurl = http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

El directorio de registro debe existir o supervisord se negará a comenzar. Cree el directorio de registro y comience supervisord en primer plano con esa configuración:

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

Elimine el directorio de registro mientras supervisord todavía se está ejecutando:

$ rmdir /thelogdir

Intenta iniciar el proceso:

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT

Todos 4 comentarios

También he visto y me ha molestado este comportamiento. Creo que el comportamiento correcto es crear logdir si es posible, y como mínimo no debería permitirse bloquear otras tareas

También he visto y me ha molestado este comportamiento.

¿Cuándo ocurre? El comentario original no es específico. ¿Se produce un bloqueo cuando stdout_logfile en una sección [program:x] especifica un directorio de registro que no existe? ¿Qué versión de Supervisor estás usando?

Creo que el comportamiento correcto es crear logdir si es posible

No uso ningún otro programa que tenga un comportamiento como este. supervisord no tiene suficiente información para crear automáticamente un directorio de registro, ya que no sabe qué usuario debería poseer el directorio o cuáles deberían ser los permisos. Creo que lo único que puede hacer sin aumentar un montón de opciones para todo esto es mostrar un mensaje de error claro cuando no existe un directorio de registro.

como mínimo, no se debe permitir que se bloqueen otras tareas

Estoy de acuerdo en que agregar una sección [program:x] donde stdout_logfile o stderr_logfile especifica un directorio que no existe no debería bloquearse supervisord .

¿Ocurre un bloqueo cuando stdout_logfile en una sección [programa: x] especifica un directorio de registro que no> existe? ¿Qué versión de Supervisor estás usando?

Si. Algún problema en 3.1.3 para mí.

Corregido en fd22ca89ff353fbe92845e9d2517645e6cf149ac. Esta corrección se incluirá en Supervisor 3.2.

A continuación, se explica cómo duplicarlo y verificar que esté arreglado. Mínimo supervisord.conf :

[supervisord]
logfile = /tmp/supervisord.log

[inet_http_server]
port = 127.0.0.1:9001

[supervisorctl]
serverurl = http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

El directorio de registro debe existir o supervisord se negará a comenzar. Cree el directorio de registro y comience supervisord en primer plano con esa configuración:

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

Elimine el directorio de registro mientras supervisord todavía se está ejecutando:

$ rmdir /thelogdir

Intenta iniciar el proceso:

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ymsaout picture ymsaout  ·  4Comentarios

meshy picture meshy  ·  4Comentarios

crybat picture crybat  ·  5Comentarios

alexmnv picture alexmnv  ·  3Comentarios

swisspol picture swisspol  ·  5Comentarios