Logrotate 和打开文件

Kyl*_*ndt 23 linux logrotate

logrotate 如何处理打开的文件?logrotate 可以旋转进程打开的文件吗?

Kyl*_*ndt 19

看起来我可能想要以下内容,但仍然对任何人在该主题上的专业知识感兴趣:

copytruncate
              Truncate  the original log file to zero size in place after cre?
              ating a copy, instead of moving the old log file and  optionally
              creating  a new one. 
Run Code Online (Sandbox Code Playgroud)

  • 这就像做 "cp something.log something.log.1; :> something.log" 所以文件变空但文件句柄没有中断。问题是 2 个命令之间的时间,您可能会丢失一些日志行 (2认同)

Sco*_*ack 9

对于那些不接受 Rory 描述的 logrotate 信号的应用程序,我使用了几种方法。

  1. 使用复制截断选项
  2. 添加 post-rotate 语句重启服务

决定使用哪个取决于日志文件的大小和无缝日志的必要性。这将是您自己的风险分析。但是,举个例子,我在某些日志上使用旋转后重启,我实际上应该使用 copytruncate。然而,这些文件通常是几场演出,复制可能需要足够长的时间,每晚丢失一两秒钟是可取的。


Ama*_*rus 6

logrotate 会向进程发送正确的信号,告诉它重新打开日志文件。对于 apache 或 mysql 之类的东西,它开箱即用。

您可以在 apache 的 postrotate 脚本中看到这一点。如果您有自己的守护进程,并且希望 logrotate 使用它,请确保它侦听某个信号并重新打开日志文件。

如果您无法更改程序,那么您可以查看守护进程是否有自动刷新日志的方法。或者添加一个停止服务器的预旋转,以及一个再次启动它的后旋转。