Tail

使用舊名稱拖尾新文件

  • May 1, 2013

這與如何開始跟踪尚未創建的文件的方式類似:名稱已存在的文件。

我有一個執行多次的程序;當輸出文件名已被使用時,它通過_XYZ在文件副檔名之前插入XYZ最小整數(例如, output.out成為output_001.out,或者output_002.out如果output_001.out已經存在等)來重命名現有文件,並使用主名稱創建一個新的輸出文件.

如果我拖尾主名稱,即使使用-F,它也會立即開始拖尾現有文件並保留該 inode 的句柄,即使文件被重命名,忽略新文件。

該程序在具有隊列管理的共享集群上執行,因此執行以長且可變的滯後開始。

是否甚至可以在不等待首先創建新文件的情況下跟踪新文件?如果是這樣,怎麼做?

tail -F應該已經這樣做了。

創建一個空的/tmp/t/file. 然後,在終端 1 中,啟動tail -F並讓它執行:

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

在 2 號航站樓,我做了:

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

如您所見,tail -F確實遵循名稱,而不是inode。也許您使用的 atail賦予了不同的含義-F(該標誌是 BSD 擴展,後來也被 GNU 複製),或者您的版本有問題?您也可以嘗試tail --follow=name --retry(GNU 尾部替代語法)或xtail(尾部是整個目錄)。

引用自:https://unix.stackexchange.com/questions/74322