当我为日志文件运行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.
即使文件被删除,重命名等,您也可能需要使用tail -F(大写-F).
tail -F my.log
Run Code Online (Sandbox Code Playgroud)
tail -f(小写)仅使用文件描述符,它不关心文件名是什么.tail -F使用文件名,因此如果您删除或重命名原始文件并放置一个新文件,它将拾取新文件.
至于logrotate,它有几种不同的方式.默认情况下,它会移动(重命名)原始文件,并创建一个新的空文件.在这种情况下,为日志记录过程维护文件描述符,直到它关闭并重新打开,然后它将获取新文件.
如果使用logrotate"copytruncate"选项,则会保留文件和文件描述符,并且logrotate会将所有数据复制到新文件,截断原始文件并保留原始文件.某些进程不会关闭其日志文件,因此使用copytruncate是必要的.没有它,该过程将继续以其新名称登录到该文件.
此行为是设计使然,在UNIX中,打开文件的文件描述符不受重命名或删除操作的影响.