"tail -f"和logrotate如何工作?

umu*_*mut 8 logrotate tail

当我为日志文件运行tail -f时,logrotate将其旋转,但tail -f没有停止.它继续显示新文件中的日志.之后我尝试手动;

mv my.log my.log.2
touch my.log
echo "test text" >> my.log
echo "test text" >> my.log
Run Code Online (Sandbox Code Playgroud)

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

注意:我正在研究centos 5.

cod*_*eim 6

即使文件被删除,重命名等,您也可能需要使用tail -F(大写-F).

  tail -F my.log
Run Code Online (Sandbox Code Playgroud)

tail -f(小写)仅使用文件描述符,它不关心文件名是什么.tail -F使用文件名,因此如果您删除或重命名原始文件并放置一个新文件,它将拾取新文件.

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

如果使用logrotate"copytruncate"选项,则会保留文件和文件描述符,并且logrotate会将所有数据复制到新文件,截断原始文件并保留原始文件.某些进程不会关闭其日志文件,因此使用copytruncate是必要的.没有它,该过程将继续以其新名称登录到该文件.

此行为是设计使然,在UNIX中,打开文件的文件描述符不受重命名或删除操作的影响.