当我为日志文件运行尾-f时,日志旋转它,但是尾-f没有停止。它继续在新文件中显示日志。之后,我手工尝试;
mv my.log my.log.2
touch my.log
echo "test text" >> my.log
echo "test text" >> my.log它不起作用。如何旋转日志?它是否将所有行复制到新文件中?
注:我正在研究中心5号。
发布于 2014-05-23 07:07:56
您可能希望尾-F (大写的-F)跟随,即使文件被删除,重命名,等等。
tail -F my.log尾-f (小写)只使用文件描述符,它不关心文件名是什么。尾巴-F使用文件名,所以如果删除或重命名原始文件并放置一个新的文件,它将拾取新文件。
至于日志旋转,它有几种不同的工作方式。默认情况下,它会移动(重命名)原始文件,并创建一个新的空文件。在这种情况下,日志过程的文件描述符将被维护,直到它关闭并重新打开,然后它将得到新的文件。
如果您使用log旋转式“复制截断”选项,那么文件和文件描述符都会被维护,日志旋转会将所有数据复制到一个新文件中,截断原始文件并将原始文件保留在原来的位置。有些进程不关闭它们的日志文件,因此必须使用版权截断。没有它,进程将继续以它的新名称登录到该文件。
这种行为是设计上的,在UNIX中,打开文件的文件描述符不受重命名或删除操作的影响。
发布于 2014-05-23 07:15:40
要知道这个问题的答案,您需要知道logrotate对文件做了什么。从“尾部手册”页面
使用-f,尾默认为文件描述符后面,这意味着即使一个尾文件被重命名,尾也将继续跟踪它的结束。当您真正想要跟踪文件的实际名称而不是文件描述符(例如日志旋转)时,这种默认行为是不可取的。在那种情况下,请使用-名字。这会导致尾以一种适合重命名、删除和创建的方式跟踪指定的文件。
您所看到的可能会表明,在日志旋转对文件进行操作时,fd并没有改变,因此很可能使用的是复制截断方法。
https://stackoverflow.com/questions/23822899
复制相似问题