何时在 logrotate 中使用延迟压缩选项?

Ana*_*thu 44 logrotate

的手册页logrotate说:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.
Run Code Online (Sandbox Code Playgroud)

我对此感到困惑。如果程序不能被告知关闭其日志文件,它将续写永恒,而不是一段。如果压缩被推迟到下一个循环周期,即使在下一个循环周期之后,程序也会继续写入该文件。延期如何解决问题?

我的理解是copytruncate当不能告诉程序关闭日志文件时应该使用它。我知道一些写入日志文件的数据在复制过程中会丢失。

我正在查看 couchdb 的 logrotate 文件,它有copytruncatedelaycompress选项。

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}
Run Code Online (Sandbox Code Playgroud)

看起来使用delaycompresswhencopytruncate已经没有意义了。我错过了什么?

wom*_*ble 35

您对 的理解copytruncate是正确的,但联机帮助页中的措辞delaycompress有点误导。更恰当地说,它应该说“当某些程序不能被告知立即关闭它的日志文件时”——例如,如果您使用的是共享脚本,并且脚本在所有日志文件都已轮换后使用日志向进程发送信号.

  • 除非*绝对*必须,否则不要使用`copytruncate`,因为它会丢失日志条目。如果您需要 `delaycompress` 提供的其他功能,您可以使用这两个选项——无需先解压缩即可读取前一个日志文件的能力。 (6认同)
  • 不。这就是为什么你应该使用不烂的软件,并且它会接受一个信号说“重新加载你的日志”。 (5认同)

小智 5

我们用:

  • 日常的
  • 延迟压缩
  • 节点文本

这将创建 apache 的固定副本access_log access_log.1,以便我们可以在一天结束时将 Stats 包作为脚本运行。

第二天 logrotate 压缩文件创建access_log.2.zip