这是沿着如何开始跟踪尚未创建的文件有一点不同:具有该名称的文件已经存在。
我有一个运行多次的程序;当输出文件名已被使用时,它会通过_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
确实遵循名称,而不是 inode。也许您使用的tail
赋予了不同含义-F
(该标志是 BSD 扩展,后来也被 GNU 复制),或者您的版本有错误?您也可以尝试tail --follow=name --retry
(GNU tail 替代语法)或xtail
(跟踪整个目录)。