Cronolog 与 logrotate

Unk*_*own 11 cronolog logrotate

您更喜欢哪种日志轮换工具?

Tom*_*ner 14

根据我的经验,logrotate 很棒。它非常灵活,适用于大多数软件。

但是,它存在一些问题,并且由于 cronolog 主要是一个网络日志轮换工具,我将写下我使用 logrotate + apache 的经验,这是有问题的:

在轮换日志时,我们必须通知 apache 日志正在轮换,因为即使 logrotate 将 access.log 重命名为 access.log.1,apache 也会继续写入 access.log.1,因为它正在写入 inode,并且重命名文件不会影响 inode 编号。

在 debian etch(可能还有许多其他发行版)上,logrotate 被用于轮换 apache 日志。现在,apache 有一个优雅的重启,建议 apache 子进程在完成现有连接服务后退出,然后 apache 重新读取它的配置,产生新的子进程,这些子进程开始写入新的日志文件(如果前一个是旋转)。

这听起来是一个很好的解决方案,但是优雅重启在某些情况下并不总是有效(如重负载),因此 debian 开发人员决定在 apache logrotate 配置中使用 apache 重启而不是优雅重启。不幸的是,这会导致所有连接立即断开,这对于负载较重的站点来说是非常糟糕的。此外,apache重启也会导致apache停止不启动等问题(在某些负载情况下也是如此),详情请参见下面的bug链接。

最重要的是,logrotate 很棒,但可能会导致某些程序出现某些问题。我对 cronolog 没有太多经验,但是当它通过管道写入日志时,它在轮换日志文件时不需要任何 apache 重新加载,这基本上解决了上述所有问题。

相关的 logrotate/apache debian 错误:

  1. Debian 错误#301702
  2. Debian 错误#400455

  • 上述解决方案是使用 truncate !它所做的是将 access.log 的内容复制到 access.log.1,然后清空 access.log(如您所见,access_log 的 inode 剩余部分保持不变)。通常您的日志不会超过几 GB(在最坏的情况下),因此整个过程不会花费很长时间! (2认同)