O filho do supervisor stdout.log: leitura em tempo real

0

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 está produzindo uma grande quantidade de 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 em stdout.log .

Eu 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.

Eu não preciso manter o stdout para referência futura.

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

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

    
por Alex Poca 23.11.2017 / 10:13

1 resposta

1

Se você quiser evitar danificar o disco (que eu não vi alguém se preocupar com a idade), você pode criar um disco virtual para direcionar esses arquivos de log para 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, em seguida, use este diretório /var/log/tmplogs como destino para esses arquivos.

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

Is there a possibility to set Supervisor to continuously update stdout.log?

Eu diria que não, já que ele deve gravar os logs assim que recebidos e que, na maioria das vezes, isso não é um problema do supervisord, mas sem o comando lançado não há como saber se você está acertando um bug ou se é normal pelo seu comando.

    
por 24.04.2018 / 14:01