logrotate 仅压缩最后 n 个日志

logrotate 仅压缩最后 n 个日志

我需要每天轮换 /var/log/messages 并保存 60 天,其中最后 30 个日志必须使用 bzip2 进行压缩。

这是我的 logrotate 配置:

/var/log/messages {                                                                                              daily
    rotate 60
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true    
    endscript 
}

但结果是保留了最近 60 条每天未压缩的日志。如果添加compress,则所有 60 条日志都将被压缩。

那么有没有办法让它只压缩最后 30 条日志?

答案1

我认为 logrotate 没有这样的选项可以直接执行此操作。只有一个相关选项是将压缩延迟一个日志轮换周期(在您的情况下为一天)。可能,您可以通过编写 shell 脚本来检查您目前有多少个日志文件并压缩/解压所需的文件delaycompress来利用该选项。compresscmd

另一种可能性是安排一项日常cron工作来运行脚本来检查您的日志文件并压缩/解压缩您想要的内容。

相关内容