Tail
使用舊名稱拖尾新文件
這與如何開始跟踪尚未創建的文件的方式類似:名稱已存在的文件。
我有一個執行多次的程序;當輸出文件名已被使用時,它通過
_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
(尾部是整個目錄)。