Eine neue Datei mit einem alten Namen verfolgen

Eine neue Datei mit einem alten Namen verfolgen

Dies ist in etwa soSo starten Sie das Tailing einer Datei, die noch nicht erstellt wurdemit einer Wendung: Eine Datei mit diesem Namen existiert bereits.

Ich habe ein Programm, das mehrmals ausgeführt wird. Wenn der Name der Ausgabedatei bereits verwendet wird, benennt es die vorhandene Datei um, indem es _XYZvor der Dateierweiterung Folgendes einfügt: wobei XYZdie kleinste Ganzzahl ist (z.B, output.outwird output_001.out, oder output_002.outwenn output_001.outbereits vorhanden ist usw.) und erstellt eine neue Ausgabedatei mit dem primären Namen.

Wenn ich den primären Namen anhänge, selbst mit -F, beginnt es sofort mit dem Anhängen der vorhandenen Datei und behält den Handle zu diesem Inode bei, selbst wenn die Datei umbenannt wird, und ignoriert die neue Datei.

Das Programm wird auf einem gemeinsam genutzten Cluster mit Warteschlangenverwaltung ausgeführt, sodass die Ausführung mit langen und variablen Verzögerungen beginnt.

Ist es überhaupt möglich, die neue Datei zu verfolgen, ohne darauf zu warten, dass sie zuerst erstellt wird? Und wenn ja, wie?

Antwort1

tail -Fsollte dies bereits tun.

Erstellen Sie eine leere /tmp/t/file. Starten Sie dann in Terminal 1 tail -Fund lassen Sie es laufen:

anthony@Zia:~$ tail -F /tmp/t/file
a
b
tail: `/tmp/t/file' has become inaccessible: No such file or directory
tail: `/tmp/t/file' has appeared;  following end of new file
c
d

Im Terminal 2 habe ich Folgendes gemacht:

anthony@Zia:/tmp/t$ echo a >> file
anthony@Zia:/tmp/t$ echo b >> file
anthony@Zia:/tmp/t$ mv -i file file.old; echo c >> file
anthony@Zia:/tmp/t$ echo d >> file

Wie Sie sehen, tail -Ffolgt tatsächlich dem Namen, nicht dem Inode. Vielleicht verwenden Sie ein , taildas eine andere Bedeutung hat (dieses Flag ist eine BSD-Erweiterung, die später auch von GNU kopiert wurde), oder Ihre Version ist fehlerhaft? Sie könnten auch (alternative Syntax für GNU-Tail) oder (das ein ganzes Verzeichnis tailt) -Fversuchen .tail --follow=name --retryxtail

verwandte Informationen