什么时候在logrotate中使用delaycompress选项?


33

的手册页中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.

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

我的理解是,copytruncate当无法告知程序关闭日志文件时,应使用该命令。我知道在进行复制时,写入日志文件的某些数据会丢失。

我当时在看沙发床的logrotate文件,它同时具有copytruncatedelaycompress选项。

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

似乎没有必要使用delaycompress何时copytruncate已经存在。我想念什么?

Answers:


27

您的理解copytruncate是正确的,但手册页中的措词delaycompress有些误导。更正确地说,它应该说“无法通知某些程序立即关闭其日志文件” –例如,如果您使用共享脚本,并且当所有日志文件都旋转后,脚本会使用日志向进程发送信号。


1
当我使用时copytruncate,不需要告诉程序关闭它的日志文件。因此,指定delaycompress与一起有意义copytruncate吗?
2011年

6
copytruncate除非绝对必要,否则切勿使用,因为它会丢失日志条目。如果您想要另一个提供的功能,则可以使用这两个选项delaycompress-能够读取前一个日志文件而无需先对其解压缩。
womble

除了copytruncate无法告诉我的程序重新加载之外,还有其他选择吗?
2011年

5
否。这就是为什么您应该使用不会吸引用户的软件的原因,该软件会接受一个表示“重新加载日志”的信号。
womble

3

不知道我是否完全理解您的问题,但是如果您要问我的想法...我使用此方法:

postrotate
          killall -HUP syslog-ng
  endscript

这是杀死日志并移至下一个的一种好方法(或至少一种方法)。对于令人讨厌的“程序”(例如每秒记录大量数据的Cisco ASA平台),它可以工作。


3

我们用:

  • 日常
  • 延迟压缩
  • nodateext

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

次日logrotate压缩文件创建 access_log.2.zip

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.