使用旧名称尾随新文件

使用旧名称尾随新文件

这是沿着如何开始跟踪尚未创建的文件有一点不同:具有该名称的文件已经存在。

我有一个运行多次的程序;当输出文件名已被使用时,它会通过_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(跟踪整个目录)。

相关内容