stdout.log filho do supervisor: leitura em tempo real

stdout.log filho do supervisor: leitura em tempo real

O Supervisor ativa alguns processos filhos.

Eu configurei cada um deles assim:

[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

Um dos processos é produzir muita saída de tela que eu gostaria de ler em tempo real durante os testes: 5 linhas são impressas a cada segundo.

Eles agora estão logados stdout.log.

pensei em ler stdout.logcom

watch -0.1 tail /XXXXX/stdout.log

mas vejo que NÃO é atualizado ao receber cada linha: o conteúdo do log provavelmente é armazenado em cache até atingir um tamanho predefinido antes de ser salvo no arquivo.

Não preciso manter o stdout para referência futura.

Existe a possibilidade de definir o Supervisor paraatualizar continuamente stdout.log?

Ou, melhor ainda, para evitar danificar o disco a longo prazo, existe a possibilidade de imprimir as últimas X linhas stdoutSEM salvá-las stdout.log?

Responder1

Se você quiser evitar danificar o disco (o que eu não via ninguém se preocupar há muito tempo), você pode criar um ramdisk para direcionar esses arquivos de log assim:

mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs

Ou no formato fstab:

tmpfs       /var/log/tmplogs   nodev,nosuid,noexec,nodiratime,size=5M 0 0

E então use este /var/log/tmplogsdiretório como destino para esses arquivos.

Isso não resolverá nenhum problema de buffer de log mencionado. Mas geralmente o atraso é causado pelo seu comando armazenando em buffer sua saída (ele pode se comportar de maneira diferente com e sem tty) e não pelo supervisord, você pode confirmar que seguindo o exemplo no supervisordedição 803.

Existe a possibilidade de configurar o Supervisor para atualizar continuamente o stdout.log?

Eu diria que não, já que ele já deveria escrever logs assim que recebidos e que principalmente isso não é um problema de supervisão, mas sem o comando iniciado não há como saber se você está encontrando um bug ou se é normal por seu comando.

informação relacionada