You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
}

验证步骤

  1. 先跑调试模式看执行逻辑:logrotate -d /etc/logrotate.d/custom.conf,从输出里检查是否正确匹配了原始日志,有没有识别到要清理的旧日志。
  2. 手动强制轮转一次:logrotate -f /etc/logrotate.d/custom.conf,之后观察日志文件,应该不会再出现多个日期后缀,超过maxage天数的旧日志也会被自动清理。

另外提一句:要确保logrotate有足够权限访问这些日志文件和所在目录哦。

内容的提问来源于stack exchange,提问作者J. Lai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:13:11