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.
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
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
:El directorio de registro debe existir o
supervisord
se negará a comenzar. Cree el directorio de registro y comiencesupervisord
en primer plano con esa configuración:Elimine el directorio de registro mientras
supervisord
todavía se está ejecutando:Intenta iniciar el proceso: