Tail -f für neu erstellte Dateien mit unbekannten Namen

Tail -f für neu erstellte Dateien mit unbekannten Namen

Ich habe ein Programm, das bei jedem Durchlauf eine neue Logdatei erzeugt. Um zu sehen, was passiert, würde ich gerne auf tail -fdas Log zugreifen – das Problem ist nur, dass ich den Dateinamen im Vorhinein nicht kenne.

Gibt es also eine Möglichkeit, alle Dateien zu verfolgen, die einem bestimmten (Shell-Glob-)Muster entsprechen? Ich schätze, ich könnte so etwas leicht skripten, frage mich aber, ob es bereits eine Lösung dafür gibt.

Antwort1

Ich glaube nicht, dass es eine direkte Möglichkeit gibt, dies zu tun, tailohne den Namen zu kennen. Wenn Sie ihn kennen würden, tail --follow=name --retrywürde es funktionieren und auf das Erscheinen der Datei warten und dann mit der Verfolgung beginnen.

Ich würde vorschlagen, ein kleines Shell-Skript zu schreiben, das inotifywaitauf das Erscheinen der Datei wartet und tail -fihr dann folgt.

Antwort2

Wenn Sie den Dateinamen nicht im Voraus kennen:

  1. Entscheiden Sie sich für einen Dateinamen, wiefoo.log
  2. beobachten Sie diese Datei: tail -F foo.log(egal ob foo existiert oder nicht)
  3. Verwenden Sie ein Tool, um das Verzeichnis auf Dateiänderungen zu überwachen und einen Befehl auszuführen

Für den Befehl entweder:

  • Verschieben Sie die neue Datei, um foo.log zu überschreiben mv the_new_file_which_appeared foo.log(wenn die App-Protokollierung einmal geöffnet wird, funktioniert dies problemlos).
  • oder einfach einen symbolischen Link: ln -s the_new_file_which_appeared foo.log- und das Ende sollte das erfassen.

Um die Verzeichnisse richtig zu überwachen (Schritt 3), benötigen Sie ein konfigurierbares, cleveres Tool.

Persönlich würde ich verwendenBewachenmit demGuard::Prozess.

In der Praxis ist Guard nicht viel schwerer als die Verwendung von Shell-Skripten (es ist eine dünne Schicht über inotify unter Linux) und die Einrichtung ist sehr schnell und einfach.

verwandte Informationen