Sto usando daemontools per monitorare un processo e il suo registro di output. Sto usando multilog per scrivere i log su disco.
Lo script di esecuzione per il registro è:
#!/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
Il processo monitorato scrive anche l'output in stderr. Quindi nello script di esecuzione per il processo ci sono le seguenti righe per reindirizzare stderr a stdout:
exec 2>&1
exec ./my_process
Tuttavia, durante la coda del file di registro, vedo centinaia di righe di output che arrivano a raffica (il processo monitorato scrive l'output ogni pochi secondi) e il timestamp sulle righe di registro differisce in livelli inferiori al microsecondo. So dalla natura del processo che la differenza di tempo tra le linee di registro non è così piccola. Chiaramente il multilog sta memorizzando nel buffer l'output e quindi aggiungendo il timestamp quando è pronto per la scrittura su file. Vorrei che i timestamp riflettessero più da vicino l'ora in cui la linea è stata emessa. Come può essere risolto?
Risposta accettata:
Lo script monitorato era uno script Python. Per rendere tutti gli stream standard non bufferizzati, ho scoperto che si può semplicemente passare il -u
opzione per l'interprete. Questo ha risolto il problema nel mio caso.