Logrotate配置:当组内任一成员满足轮转条件时轮转整个日志组
Logrotate配置:当组内任一成员满足轮转条件时轮转整个日志组
嘿,这个需求确实有点 tricky——logrotate 默认是单个文件独立判断轮转条件的,没法直接设置「组内任一触发,全部轮转」。不过咱们可以用个小技巧,靠自定义脚本配合 logrotate 的配置来实现,亲测在 Debian 上好用:
方法:用 prerotate 脚本控制组轮转逻辑
- 先在
/etc/logrotate.d/下创建你的专属配置文件,比如叫myapp-group-logs - 把下面的配置填进去(记得替换成你实际的日志路径):
/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
相关产品推荐
相关产品推荐

