我被这个问题难住了。任何帮助我都非常感谢...!
/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
)