Supervisor activa algunos procesos secundarios.
Configuré cada uno de ellos así:
[program:XXXXX]
command=/XXXXX/XXXXX
directory=/XXXXXX
autostart=true
autorestart=true
startsecs=3
startretries=10000
stdout_logfile=/XXXXXX/stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/XXXXXX/stderr.log
stderr_logfile_maxbytes=1MB
Uno de los procesos es producir una gran cantidad de resultados en pantalla que me gustaría leer en tiempo real durante las pruebas: se imprimen 5 líneas cada segundo.
Ahora están conectados stdout.log
.
Pensé en leer stdout.log
con
watch -0.1 tail /XXXXX/stdout.log
pero veo que NO se actualiza al recibir cada línea: el contenido del registro probablemente se almacena en caché hasta que alcanza un tamaño predefinido antes de guardarlo en un archivo.
No necesito conservar la salida estándar para referencia futura.
¿Existe la posibilidad de configurar Supervisor paraactualizar continuamente stdout.log
?
O, mejor aún, para evitar dañar el disco a largo plazo, ¿existe la posibilidad de volver a imprimir las últimas X líneas de stdout
SIN guardarlas en stdout.log
?
Respuesta1
Si desea evitar dañar el disco (algo por lo que no había visto a nadie preocuparse durante mucho tiempo), puede crear un disco ram para dirigir esos archivos de registro de esta manera:
mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs
O en formato fstab:
tmpfs /var/log/tmplogs nodev,nosuid,noexec,nodiratime,size=5M 0 0
Y luego use este /var/log/tmplogs
directorio como destino para esos archivos.
Esto no resolverá ningún problema de almacenamiento en búfer de registros que se dijo. Pero generalmente el retraso se debe a que su comando almacena en el búfer su salida (puede comportarse de manera diferente con y sin tty) y no a supervisord, puede confirmar que siguiendo el ejemplo en supervisordnúmero 803.
¿Existe la posibilidad de configurar Supervisor para que actualice continuamente stdout.log?
Yo diría que no, ya que se supone que debe escribir registros tan pronto como se recibe y que, en general, esto no es un problema de supervisión, pero sin el comando iniciado no hay forma de saber si está encontrando un error o si es normal. tu mando.