如何使用logrotate压缩超过1天的指定日志文件?
搞定logrotate压缩超期日志的配置方案
没问题,我来帮你配置logrotate,精准压缩那些修改时间超过1天的TRACE日志文件——正好匹配你说的TRACE_03.log、TRACE_07.log这两个超期文件,较新的日志会原样保留。
咱们一步步来:
1. 创建专属logrotate配置文件
先在logrotate的配置目录下新建一个配置文件,比如trace_logs:
sudo vi /etc/logrotate.d/trace_logs
把下面的内容粘贴进去(记得把/path/to/your/替换成你的日志实际存放路径,比如/var/log/):
/path/to/your/TRACE_*.log { # 每天自动检查一次日志状态 daily # 启用gzip压缩处理后的日志 compress # 允许日志文件不存在,避免无意义的报错 missingok # 空日志文件直接跳过,不处理 notifempty # 保留1份轮转后的日志文件(用于压缩) rotate 1 # 只处理修改时间超过1天的文件 prerotate # 检查文件修改时间,不到1天就跳过 if [ $(stat -c %Y "$1") -gt $(date -d "1 day ago" +%s) ]; then exit 1 fi endscript # 不创建新的空日志文件(因为这些超期日志已经不再被写入了) nocreate }
2. 关键参数说明
prerotate脚本:这是核心逻辑,会逐个检查每个TRACE日志的修改时间,只对超过1天的文件执行后续操作compress:自动把轮转后的日志压缩成.gz格式nocreate:因为超期日志已经停止写入,所以不需要生成新的空日志文件,避免冗余
3. 测试并生效配置
先做模拟运行,确认哪些文件会被处理(不会实际修改文件):
sudo logrotate -d /etc/logrotate.d/trace_logs
如果模拟结果符合预期,就强制运行一次让配置生效:
sudo logrotate -f /etc/logrotate.d/trace_logs
4. 自动运行设置
logrotate默认已经通过系统cron每天自动执行(通常在/etc/cron.daily/logrotate),所以之后每天它都会自动检查并压缩超期的TRACE日志,不用手动操作。
额外说明
如果你的TRACE日志里有正在被服务写入的文件(比如示例里的TRACE_01.log),可以在配置里加上copytruncate参数——它会先复制当前日志内容到轮转文件,再截断原文件,避免服务因为日志文件被重命名而无法写入。
内容的提问来源于stack exchange,提问作者Gavin Yap
相关产品推荐
相关产品推荐

