Logrotate 和打开文件

Logrotate 和打开文件

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

答案1

对于那些不接受来自 logrotate 的信号的应用程序(正如 Rory 所描述的),我使用了几种方法。

  1. 使用 copytruncate 选项
  2. 添加 post-rotate 语句以重启服务

使用哪一个取决于日志文件的大小和无缝日志的必要性。这将是您自己进行的风险分析。但是,举个例子,我在某些日志上使用后旋转重启,而实际上我应该使用 copytruncate。但是,文件通常有几 GB,复制可能需要很长时间,因此每晚损失一两秒是更好的选择。

答案2

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

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. 

答案3

logrotate 将向进程发送正确的信号,告诉它重新打开日志文件。它对于 apache 或 mysql 等系统而言是开箱即用的。

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

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

相关内容