logrotate 不删除旧文件-glob 失败

logrotate 不删除旧文件-glob 失败

我被这个问题难住了。任何帮助我都非常感谢...!

/var/log/HOSTS/cacheflow_access_log/ 中的日志配置为存档到 /var/log/HOSTS/archived/cacheflow_access_log/ 并压缩。这些文件非常大,因此应仅保留 1 天,以便 Splunk 或 Sawmill 可以总结其内容。

日志轮换和压缩没有问题,但旧的压缩日志不会被删除。logrotate 的详细输出表明这是 glob 的问题。它是否在查找居住目录,而不是档案目录?如果是,我该如何修复?如果不行,到底是怎么回事?!

Logrotate配置:

# logrotate configuration for syslog files

# global options
   rotate 1
   missingok
   daily
   compress
   ifempty
   dateformat -%Y%m%d
   dateext

---SNIP---

/var/log/HOSTS/cacheflow_access_log/* {
   daily
   # only keep 1 day of cacheflow as they're massive files
   maxage 1
   rotate 1
   olddir /var/log/HOSTS/archived/cacheflow_access_log
   postrotate
      invoke-rc.d proftpd restart 2>/dev/null >/dev/null || true
   endscript
}

Logrotate 详细输出:

considering log /var/log/HOSTS/cacheflow_access_log/CF_5000_20120803_092129.log
log needs rotating
rotating log /var/log/HOSTS/cacheflow_access_log/CF_5000_20120802_120326.log, log >rotateCount is 1
Converted ' -%Y%m%d' -> '-%Y%m%d'
dateext suffix '-20120803'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/HOSTS/cacheflow_access_log/CF_5000_20120802_120326.log to /var/log/HOSTS/archived/cacheflow_access_log/CF_5000_20120802_120326.log-20120803
running postrotate script

运行 Debian Squeeze 2.6.32-5-686-bigmem

我知道该配置中存在不必要的重复(例如,旋转 1 不需要重申) - 这只是为了确保这不是导致此问题的问题。

谢谢!

答案1

也许是因为日志文件的名称中已经有日期,所以每天都是新名称,所以失败了。通常我看到的日志文件有一个静态名称,logrotate 会添加扩展名来使它们唯一。logrotate 可能正在存档目录中寻找名为 CF_5000_20120802_120326.log 的旧文件来删除它们。它找不到任何文件,因为每个文件的基本名称都是唯一的。

答案2

对于未来的读者来说,这一行在logrotate.conf(5)文档中:

请谨慎使用通配符。如果您指定*logrotate将轮换所有文件,包括之前轮换过的文件。解决此问题的方法是使用olddir指令或更精确的通配符(例如*.log

相关内容