這是沿著如何開始追蹤尚未建立的文件有一點不同:具有該名稱的檔案已經存在。
我有一個運行多次的程式;當輸出檔案名稱已被使用時,它會透過_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
(尾部整個目錄)。