Ich verwende Daemontools, um einen Prozess und sein Ausgabeprotokoll zu überwachen. Ich verwende Multilog, um die Protokolle auf die Festplatte zu schreiben.
Das Ausführungsskript für das Protokoll lautet:
#!/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
Der überwachte Prozess schreibt auch Ausgaben auf stderr. Im Ausführungsskript für den Prozess gibt es also die folgenden Zeilen, um stderr nach stdout umzuleiten:
exec 2>&1
exec ./my_process
Beim Tailing der Protokolldatei sehe ich jedoch Hunderte von Ausgabezeilen in Bursts (der überwachte Prozess schreibt die Ausgabe alle paar Sekunden), und der Zeitstempel in den Protokollzeilen unterscheidet sich in Sub-Mikrosekunden-Ebenen. Ich weiß aus der Art des Prozesses, dass der Zeitunterschied zwischen den Protokollzeilen nicht so gering ist. Multilog puffert eindeutig die Ausgabe und fügt dann den Zeitstempel hinzu, wenn es bereit ist, in die Datei zu schreiben. Ich möchte, dass die Zeitstempel den Zeitpunkt, zu dem die Zeile ausgegeben wurde, genauer widerspiegeln. Wie kann das behoben werden?
Akzeptierte Antwort:
Das überwachte Skript war ein Python-Skript. Um alle Standard-Streams ungepuffert zu machen, habe ich herausgefunden, dass man einfach den -u
übergeben kann Option für den Dolmetscher. Dies löste das Problem in meinem Fall.