使用舊名稱尾隨新檔案

使用舊名稱尾隨新檔案

這是沿著如何開始追蹤尚未建立的文件有一點不同:具有該名稱的檔案已經存在。

我有一個運行多次的程式;當輸出檔案名稱已被使用時,它會透過_XYZ在檔案副檔名之前插入XYZ其中 的最小整數來重新命名現有檔案(例如, output.out變為output_001.out,或output_002.out如果output_001.out已經存在,等等),並使用主名稱建立新的輸出檔案。

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

該程式在具有佇列管理的共用叢集上運行,因此執行開始時會出現較長且可變的延遲。

是否有可能在不先建立新文件的情況下尾隨它?如果是這樣,怎麼辦?

答案1

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確實遵循名稱,而不是索引節點。也許你正在使用一個tail賦予不同含義的-F(該標誌是 BSD 擴展,後來也被 GNU 複製),或者你的版本有錯誤?您也可以嘗試tail --follow=name --retry(GNU tail 替代語法) 或xtail(尾部整個目錄)。

相關內容