我需要每天轮换 /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
工作来运行脚本来检查您的日志文件并压缩/解压缩您想要的内容。