为什么我们应该一起使用create和copytruncate?


40

极客材料有一个关于的例子logrotatecopytruncate将复制并截断原始日志文件。

那为什么要用create呢?原始日志文件尚未删除。

/tmp/output.log {
  size 1k
  copytruncate
  create
  compress
  compresscmd /bin/bzip2
  compressext .bz2
  rotate 4
  maxage 100
}

另一个问题是什么的用途maxage 100?该rotate 4指令将在旋转4次后删除旧的日志文件。


4
是的,这没有任何意义,man logrotate甚至这样说:“ copytruncate:[...]使用此选项时,由于旧的日志文件保留在原处,因此create选项将无效。”
Ulrich Schwarz'3

1
maxage 100当旋转的文件超过100天且当前文件已旋转时,将删除它们;即使4存在少于旋转文件的文件。
Lutz Prechelt

Answers:


57

这可能是一个错误,只能在该教程的一个示例中找到。所有其他示例都copytruncate没有create选项。此外logrotate 手册页指出,将实际忽略

copytruncate

创建副本后,将原始日志文件截断为零,而不是移动旧日志文件并有选择地创建一个新日志文件。当无法告知某些程序关闭其日志文件时,可以使用它,从而可能永远继续写入(追加)以前的日志文件。请注意,复制文件和截断文件之间的时间间隔非常短,因此可能会丢失某些日志记录数据。使用此选项时,create选项将无效,因为旧的日志文件将保留在原位。


关于maxage,我认为这对于例如在几个轮换周期(天/周/月)中可能为空的日志文件很有用-如果使用notifempty,则不会轮换空日志文件,因此您可以将太旧的轮换文件留在原地。

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.