Die Überwachung mehrerer Dateien mit Unix-Tail funktioniert möglicherweise nicht so, wie Sie es erwarten.

Die Überwachung mehrerer Dateien mit Unix-Tail funktioniert möglicherweise nicht so, wie Sie es erwarten.

Von 23. Februar 2017Technisches

von Allen Fung, Senior Software Engineer (Senior)

"tail -F" wird häufig verwendet, um Dateien auf Updates zu überwachen.

Hier erfahren Sie, wie Sie mit dem Tail mehrere Dateien gleichzeitig überwachen können.

$ tail -F file1 file2 file2

Das Problem mit dem obigen Befehl ist, dass der in file1 und file2 geschriebene Text möglicherweise nicht an neuen Zeilengrenzen auf die Festplatte geschrieben wird. Infolgedessen konnte Text aus einer Datei in Text aus der anderen Datei in der Ausgabe von tail eingefügt werden.

Hier ist ein Beispiel für das Problem. Angenommen, das Folgende wird in Datei1 geschrieben.

Linie_1
Linie_2
line_3

Angenommen, das Folgende wird in Datei2 geschrieben.

LINE_A
LINE_B
LINE_C

Wenn Text an neuen Linienbegrenzungen nicht gespült wird, ist es möglich, die folgende Ausgabe von tail zu erhalten.

lineLINE_A
_1
LINE_B
Linie_2
LINE_C
line_3

Wie Sie sehen können, wird "LINE_A" in "line_1" gespleißt, was in der ersten Zeile zu "lineLINE_A" führt. Hier sind ein paar Möglichkeiten, das Problem zu lösen.

  1. Lassen Sie mehrere Tails parallel laufen und leiten Sie die Ausgabe jedes Tails an grep. Sie müssen die Option in grep verwenden, um nur an neuen Linienbegrenzungen zu drucken.

  2. Schreiben Sie einen neuen Schwanz, der nur druckt, wenn er eine komplette Zeile aus einer Datei erhält.

  3. Ändern Sie die Anwendung, die die Protokolldateien generiert hat, um nur eine einzige Protokolldatei zu erstellen. Sie müssen sicherstellen, dass der Text an neuen Zeilengrenzen in die einzelne Datei geschrieben wird.

Hier ist der Code, den Sie oben (1) implementieren müssen.

$ vi multi-tail.sh
#!/bin/sh

# Wenn dies beendet wird, verlassen Sie auch den gesamten Hintergrundprozess.
trap'kill $(jobs -p)' EXIT

# iterieren durch jeden der angegebenen Dateinamen
für die Datei in "$@".
tun
  # Tail file in background.
  tail -F $file | grep -line-gepuffert "" &
erledigt

# wait ... bis STRG+C
warten

Ich überlasse es dem Leser, (2) und (3) zu implementieren.

Danke fürs Lesen!

Über ShareThis

ShareThis erschließt seit 2007 die Macht des globalen digitalen Verhaltens durch die Synthese von Social Share-, Interessen- und Absichtsdaten. Auf der Grundlage des Verbraucherverhaltens auf mehr als drei Millionen globalen Domains beobachtet ShareThis Echtzeit-Aktionen von echten Menschen auf echten digitalen Zielen.

Abonnieren Sie unseren Newsletter

Erhalten Sie die neuesten Nachrichten, Tipps und Updates

Abonnieren

Verwandte Inhalte