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

Logrotate配置:当组内任一成员满足轮转条件时轮转整个日志组

Logrotate配置:当组内任一成员满足轮转条件时轮转整个日志组

嘿,这个需求确实有点 tricky——logrotate 默认是单个文件独立判断轮转条件的,没法直接设置「组内任一触发,全部轮转」。不过咱们可以用个小技巧,靠自定义脚本配合 logrotate 的配置来实现,亲测在 Debian 上好用:

方法:用 prerotate 脚本控制组轮转逻辑

  1. 先在 /etc/logrotate.d/ 下创建你的专属配置文件,比如叫 myapp-group-logs
  2. 把下面的配置填进去(记得替换成你实际的日志路径):
/var/log/your-app/*.log {
    # 基础轮转参数,根据你的需求调整
    rotate 7          # 保留7份轮转后的日志
    compress          # 轮转后压缩日志
    missingok         # 日志文件不存在时不报错
    notifempty        # 空文件不轮转
    sharedscripts     # 脚本只执行一次,不是每个文件跑一遍
    
    # 核心逻辑:检查所有日志文件,只要有一个超过100MB就允许轮转
    prerotate
        THRESHOLD=100  # 阈值,单位MB
        for logfile in /var/log/your-app/*.log; do
            # 获取文件大小(MB)
            FILE_SIZE=$(du -m "$logfile" | cut -f1)
            if [ "$FILE_SIZE" -ge "$THRESHOLD" ]; then
                exit 0  # 有文件达标,放行轮转
            fi
        done
        exit 1  # 所有文件都没达标,跳过这次轮转
    endscript
    
    # 这里设一个超大的size,确保不会被单个文件的大小触发轮转,完全交给脚本控制
    size 1000M
}

原理说明

logrotate 会先执行 prerotate 里的脚本:遍历所有目标日志,只要找到一个超过100MB的,就返回0,让logrotate继续执行整个组的轮转;如果所有文件都没达标,就返回1,直接跳过这次轮转。sharedscripts 保证脚本只跑一次,不会每个日志文件都重复检查,效率更高。

验证方法

你可以手动触发logrotate测试:

logrotate -v /etc/logrotate.d/myapp-group-logs

看看输出里的判断逻辑是否符合预期。

备注:内容来源于stack exchange,提问作者wick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:42:57