首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“尾部-f”和日志旋转是如何工作的?

“尾部-f”和日志旋转是如何工作的?
EN

Stack Overflow用户
提问于 2014-05-23 06:58:45
回答 2查看 3.4K关注 0票数 8

当我为日志文件运行尾-f时,日志旋转它,但是尾-f没有停止。它继续在新文件中显示日志。之后,我手工尝试;

代码语言:javascript
复制
mv my.log my.log.2
touch my.log
echo "test text" >> my.log
echo "test text" >> my.log

它不起作用。如何旋转日志?它是否将所有行复制到新文件中?

注:我正在研究中心5号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-23 07:07:56

您可能希望尾-F (大写的-F)跟随,即使文件被删除,重命名,等等。

代码语言:javascript
复制
  tail -F my.log

尾-f (小写)只使用文件描述符,它不关心文件名是什么。尾巴-F使用文件名,所以如果删除或重命名原始文件并放置一个新的文件,它将拾取新文件。

至于日志旋转,它有几种不同的工作方式。默认情况下,它会移动(重命名)原始文件,并创建一个新的空文件。在这种情况下,日志过程的文件描述符将被维护,直到它关闭并重新打开,然后它将得到新的文件。

如果您使用log旋转式“复制截断”选项,那么文件和文件描述符都会被维护,日志旋转会将所有数据复制到一个新文件中,截断原始文件并将原始文件保留在原来的位置。有些进程不关闭它们的日志文件,因此必须使用版权截断。没有它,进程将继续以它的新名称登录到该文件。

这种行为是设计上的,在UNIX中,打开文件的文件描述符不受重命名或删除操作的影响。

票数 7
EN

Stack Overflow用户

发布于 2014-05-23 07:15:40

要知道这个问题的答案,您需要知道logrotate对文件做了什么。从“尾部手册”页面

使用-f,尾默认为文件描述符后面,这意味着即使一个尾文件被重命名,尾也将继续跟踪它的结束。当您真正想要跟踪文件的实际名称而不是文件描述符(例如日志旋转)时,这种默认行为是不可取的。在那种情况下,请使用-名字。这会导致尾以一种适合重命名、删除和创建的方式跟踪指定的文件。

您所看到的可能会表明,在日志旋转对文件进行操作时,fd并没有改变,因此很可能使用的是复制截断方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23822899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档