logrotate 只压缩最后 n 个日志

Pet*_*ter 3 logrotate

我需要每天轮换 /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 
}
Run Code Online (Sandbox Code Playgroud)

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

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

Kha*_*led 7

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

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