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.log
com
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 stdout
SEM 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/tmplogs
diretó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.