我有一个进程需要对不断增长的日志文件进行定期处理。现在,我这样做的方式非常简单(如果你真的很好奇,我会包含bash脚本)。
这解决了没有任何重叠的问题,但我担心我可能错过的1或2行。有没有更好的方法来避免重叠(以及“下”圈)?
答案 0 :(得分:3)
通过"移动旧样本",我认为你的意思是通过移动当前文件并用新文件替换它来旋转文件。
如果是,那么您可以使用--follow=name
的{{1}}选项代替tail
。这遵循文件名而不是文件描述符,即使文件被替换也允许它继续。然后,您可以在替换文件时保持-f
正常运行,并且不会错过任何条目。
对于更强大的方法,还包括tail
,或者只使用隐含--retry
的{{1}}。
从手册页:
<强>
-F
强>随着文件的增长输出附加数据;
--follow=name --retry
,-f, --follow[={name|descriptor}]
和-f
等效<强>
--follow
强>继续尝试打开文件,即使它在尾部启动时无法访问或者以后变得无法访问 - 仅对
有用--follow=descriptor
--retry
与
相同-f