Logrotate重复文件问题:如何实现压缩后删除原日志文件?
解决logrotate处理一次性日志文件后遗留空文件的问题
首先咱们来拆解下问题根源:你的应用每小时生成唯一命名的一次性日志文件(不会再往旧日志里写入内容),但原配置用了daily这种针对持续写入日志的规则。logrotate默认逻辑是保留原文件(截断为空),导致空文件每天被重复压缩,生成一堆占用inode的无用小压缩包。
要实现「压缩后直接删除原文件」,同时保留7天的压缩日志,你需要修改logrotate配置,适配这种一次性日志的场景:
/你的日志路径/J*_Status.txt { rotate 7 maxage 7 dateext compress # 核心:处理后不创建新的空文件 nocreate # 压缩完成后直接删除原日志文件 removeafterrotate # 文件不存在时不报错,避免任务执行中断 missingok # 跳过空文件,不生成无用的空压缩包 notifempty }
关键参数说明:
nocreate:禁止logrotate在处理完日志后创建新的空文件,从根源上避免后续重复处理空文件的问题。removeafterrotate:完成压缩归档操作后,直接删除原日志文件,替代默认的「截断为空」行为。missingok:如果某个日志文件已经被处理删除,logrotate不会抛出错误,让任务执行更平滑。notifempty:跳过空日志文件的处理,不会生成那些仅20字节的无用压缩包。
另外建议去掉原配置里的daily规则——你的日志是唯一命名的一次性文件,不需要按天重复触发处理,logrotate会自动识别新生成的日志文件进行处理,配合rotate 7和maxage 7就能保证只保留最近7天的压缩日志。
内容的提问来源于stack exchange,提问作者Abi
相关产品推荐
相关产品推荐

