Untergeordnetes stdout.log des Supervisors: Lesen in Echtzeit

Untergeordnetes stdout.log des Supervisors: Lesen in Echtzeit

Supervisor aktiviert einige untergeordnete Prozesse.

Ich habe sie jeweils wie folgt konfiguriert:

[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

Einer der Prozesse erzeugt eine Menge Bildschirmausgabe, die ich während Tests in Echtzeit lesen möchte: Jede Sekunde werden 5 Zeilen gedruckt.

Sie sind jetzt angemeldet stdout.log.

Ich dachte, ich lese stdout.logmit

watch -0.1 tail /XXXXX/stdout.log

aber ich sehe, dass es NICHT beim Empfang jeder Zeile aktualisiert wird: Der Protokollinhalt wird wahrscheinlich zwischengespeichert, bis er eine vordefinierte Größe erreicht, bevor er in einer Datei gespeichert wird.

Ich muss die Standardausgabe nicht für zukünftige Referenzen behalten.

Gibt es eine Möglichkeit, den Supervisor so einzustellen,ständig aktualisieren stdout.log?

Oder, noch besser, um eine Beschädigung der Festplatte auf lange Sicht zu vermeiden: Gibt es eine Möglichkeit, die letzten X-Zeilen auszudrucken, stdoutOHNE sie zu speichern stdout.log?

Antwort1

Wenn Sie eine Beschädigung der Festplatte vermeiden möchten (eine Sache, die sich seit Ewigkeiten niemand mehr zu Herzen genommen hat), können Sie eine Ramdisk erstellen und die Protokolldateien dorthin leiten:

mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs

Oder im fstab-Format:

tmpfs       /var/log/tmplogs   nodev,nosuid,noexec,nodiratime,size=5M 0 0

Und verwenden Sie dann dieses /var/log/tmplogsVerzeichnis als Ziel für diese Dateien.

Dies wird jedoch kein Problem mit der Protokollpufferung lösen. Normalerweise wird die Verzögerung jedoch dadurch verursacht, dass Ihr Befehl seine Ausgabe puffert (es kann sich mit und ohne tty unterschiedlich verhalten) und nicht durch Supervisord. Sie können dies bestätigen, indem Sie dem Beispiel in Supervisord folgen.Ausgabe 803.

Gibt es eine Möglichkeit, Supervisor so einzustellen, dass stdout.log kontinuierlich aktualisiert wird?

Ich würde sagen, nein, da es bereits so vorgesehen ist, dass Protokolle sofort nach Erhalt geschrieben werden und dies meistens kein Supervisord-Problem ist, aber ohne den gestarteten Befehl gibt es keine Möglichkeit zu sagen, ob es sich um einen Fehler handelt oder ob es laut Ihrem Befehl normal ist.

verwandte Informationen