Logrotate自定义配置文件未清理旧日志问题求助
你的Logrotate配置问题排查与修复方案
首先,你碰到的日志文件名反复追加日期后缀(比如*.log-20180428-20180430...),以及maxage不清理旧日志的问题,核心是两个关键配置缺失或路径匹配出错,我给你一步步拆解:
1. 路径匹配踩了坑
你配置里用的/directory_name/*/*/*.log*会把已经轮转完成的旧日志(比如xxx.log-20180428)也纳入匹配范围——因为它们符合*.log*的模式。每次logrotate运行时,都会把这些旧日志当成新的原始日志再轮转一次,自然就会不断追加日期后缀。
修复办法:把路径匹配改成/directory_name/*/*/*.log(去掉末尾的*),只匹配原始的.log文件,跳过带日期后缀的旧日志。
2. 缺少rotate配置导致maxage失效
maxage的作用是清理超过指定天数的旧轮转日志,但它得配合rotate一起用——rotate用来指定要保留多少个轮转日志文件,没有它的话,logrotate没法正确识别哪些是需要清理的旧日志。
建议添加:在配置块里加上rotate 7(数字可以根据你的需求调整,比如保留7个轮转文件)。
3. 确认maxage的生效逻辑
maxage是根据文件的最后修改时间来判断是否删除,不是看文件名里的日期后缀。如果你的日志是按大小轮转(比如用size配置),要确保maxage和轮转频率的逻辑匹配。
修正后的参考配置
/directory_name/*/*/*.log { daily # 可以换成weekly/monthly或者size 100M,根据你的轮转需求来 rotate 7 # 保留7个轮转日志文件 maxage 30 # 删除30天前的旧日志 missingok # 日志文件不存在时不报错 notifempty # 空日志不轮转 # 如果你的程序不支持自动重新打开日志文件,就用copytruncate;否则用create # copytruncate # create 0644 root root }
验证步骤
- 先跑调试模式看执行逻辑:
logrotate -d /etc/logrotate.d/custom.conf,从输出里检查是否正确匹配了原始日志,有没有识别到要清理的旧日志。 - 手动强制轮转一次:
logrotate -f /etc/logrotate.d/custom.conf,之后观察日志文件,应该不会再出现多个日期后缀,超过maxage天数的旧日志也会被自动清理。
另外提一句:要确保logrotate有足够权限访问这些日志文件和所在目录哦。
内容的提问来源于stack exchange,提问作者J. Lai
相关产品推荐
相关产品推荐

