Linux 当有两个进程使用同一个文件时,logrotate如何工作?

Linux 当有两个进程使用同一个文件时,logrotate如何工作?,linux,logrotate,Linux,Logrotate,例如: 程序A正在将日志写入文件test.log 如果运行logrotate,它将首先将test.log重命名为test.log.1,然后创建一个新文件test.log 步骤2之后,程序A不会报告任何错误,但A的日志不会出现在新文件test.log中 问题是: 步骤2之后写入文件的数据在哪里 当另一个进程正在写入文件时,logrotate如何重命名和创建新文件?关于logrotate,我有没有遗漏任何一点 谢谢 这与POSIX文件系统的工作方式密切相关。重命名文件时,仅更改文件名,磁盘上的物理文

例如:

程序A正在将日志写入文件test.log

如果运行logrotate,它将首先将test.log重命名为test.log.1,然后创建一个新文件test.log

步骤2之后,程序A不会报告任何错误,但A的日志不会出现在新文件test.log中

问题是:

步骤2之后写入文件的数据在哪里

当另一个进程正在写入文件时,logrotate如何重命名和创建新文件?关于logrotate,我有没有遗漏任何一点


谢谢

这与POSIX文件系统的工作方式密切相关。重命名文件时,仅更改文件名,磁盘上的物理文件不会更改。此外,打开文件后,使用该文件的进程只有通过多个层链接到磁盘上的物理文件,仅在打开文件时使用该名称

这意味着程序A仍将写入同一文件,在您的示例中,该文件现在具有新名称,即test.log.1


该问题的常见解决方案是让测井旋转程序发送信号,例如SIGHUP或SIGUSR1或类似的过程。进程将检测到此信号,然后重新打开日志以使用新文件。

在logrotate源代码中,一个配置文件使用kill-HUP通知进程。但是在我的linux PC中,默认的logrotate.conf不发送信号。我很困惑。