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.log
mit
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, stdout
OHNE 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/tmplogs
Verzeichnis 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.