Gibt es eine Möglichkeit, eine Datei unter Linux zu streamen?

Gibt es eine Möglichkeit, eine Datei unter Linux zu streamen?

Ich habe eine Terminalausgabe, die mehreren Benutzern zur Verfügung stehen soll

derzeit sowas wie:

command > /var/logs

für die Eingabe und:

watch tail -30 /var/logs

für die Eingangsanschlüsse.

Dies ist jedoch unerwünscht, da „watch“ nur Abfragen durchführt und keine Ausgabe bei Aktualisierungen vornimmt, und „tail“ kein Zurückscrollen zulässt.

Antwort1

Sie stellen zwei Probleme:

Beobachten Sie nur Umfragen, anstatt sie auszugeben, wenn es Updates gibt

tail -fführt keine Abfrage durch. Ab Version 7.5 von GNU Coreutils tail -fwird die Schnittstelle des Linux-Kernels verwendet, inotifyum Signale vom Kernel zu empfangen, die anzeigen, dass die Datei geändert wurde. Wenn Sie GNU Coreutils nicht verwenden oder aus irgendeinem Grund eine Version verwenden, die älter als 7.5 ist, wird einmal pro Sekunde eine Abfrage durchgeführt. Es führt wahrscheinlich auch eine Abfrage auf Nicht-Linux-POSIX-Betriebssystemen (BSD, Solaris usw.) durch, aber Sie müssten dies von Fall zu Fall prüfen: Einige dieser Betriebssysteme verwenden GNU Coreutils, aber der Kernel unterstützt dies nicht inotify; einige von ihnen verwenden GNU Coreutils zur Implementierung tailüberhaupt nicht.

tail erlaubt kein Scrollback

Der lessBefehl ist speziell dafür gedacht, Daten stdin(z. B. aus dem tailBefehl) zu puffern und Ihnen das Vor- und Zurückblättern zu ermöglichen. Der Puffer ist nicht unbegrenzt, aber Sie können Befehlszeilenoptionen verwenden, um den Puffer zu vergrößern oder zu verkleinern sowie die Pufferlänge für das Zurück- und Vorwärtsblättern zu ändern.

Also so etwas wie vielleicht

tail -f /var/logs | less

würde es Ihnen ermöglichen, einen Scrollback-Puffer der Protokolle ohne Abfrage beizubehalten ( tailsitzt einfach im Leerlauf da und verbraucht keine CPU, bis der Kernel ihm ein Signal sendet und ihn darüber informiert, dass die Datei geändert wurde).

Wenn mehrere Benutzer aus demselben Puffer lesen können müssen, können Sie dies einfach tail -f /var/logsinnerhalb einer screenSitzung ausführen. In meiner ursprünglichen Antwort wurde nicht berücksichtigt, dass Sie dies ausführen möchten, damit mehrere Benutzer gleichzeitig dieselben Protokolldaten sehen können. @Let_Me_Be hat es erwähnt screenund dann ist mir eingefallen, dass dies wahrscheinlich Ihre beste Option ist.

Wenn ich also meine Lösung und die Lösung von @Let_Me_Be zusammenfasse:

screen -mdS logview -- tail -f /var/logs

Achtung: Ungetestet. Bitte bearbeiten, wenn es falsch ist. Aber ich denke, wir sind hier einer richtigen Lösung nahe.

Jetzt müssen Sie nur noch screenden Mehrbenutzermodus aktivieren. Das ist ein wenig kompliziert, deshalb lasse ichDasmultiuser onWebsite spricht für sich. Das Wesentliche ist, dass Sie zu Ihrer ~/.screenrcDatei hinzufügen müssen . Siehe auch dieAllgemeine Problemeam Ende dieses Links.

So können Benutzer das Protokoll jetzt anzeigen:

screen -rS logview

Sollte es tun.

Antwort2

Sie möchten ein Programm wie screenoder tmux.

verwandte Informationen