O script que está sendo monitorado era um script Python. Para tornar todos os fluxos padrão sem buffer, descobri que é possível passar a opção -u
para o interpretador. Isso resolveu o problema no meu caso.
Estou usando daemontools para monitorar um processo e seu log de saída. Estou usando o multilog para gravar os registros em disco.
O script de execução do log é:
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
cd /usr/local/script_dir
exec multilog t s16777215 n50 '!tai64nlocal' '!/bin/gzip' /var/log/script_log
O processo que está sendo monitorado também grava a saída para stderr. Portanto, no script de execução do processo, há as seguintes linhas para redirecionar o stderr para o stdout:
exec 2>&1
exec ./my_process
No entanto, enquanto atalho o arquivo de log, vejo centenas de linhas de saída entrando em rajadas (o processo monitorado grava a saída a cada poucos segundos) e o registro de data e hora nas linhas de log difere em níveis sub-microssegundos. Eu sei da natureza do processo que a diferença de tempo entre as linhas de log não é tão pequena. Claramente, o multilog está armazenando em buffer a saída e, em seguida, adicionando o registro de data e hora quando está pronto para gravar no arquivo. Eu gostaria que os timestamps refletissem mais de perto a hora em que a linha foi gerada. Como isso pode ser corrigido?
Tags logs buffer daemontools