温馨提示×

如何压缩linux旧日志

小樊
44
2026-10-26 00:19:47
栏目: 智能运维

在 Linux 上“压缩旧日志”通常有三层做法:手动压缩、用 logrotate 自动管理、按时间/大小自动清理并压缩。下面按常见场景说明。


一、手动压缩旧日志(最简单)

1. 压缩单个旧日志

gzip /var/log/old.log

生成:old.log.gz

2. 压缩某目录下 N 天前的日志

find /var/log -name "*.log" -mtime +7 -exec gzip {} \;

说明:

  • -mtime +7:修改时间超过 7 天
  • 只压缩,不删除

3. 压缩并删除原文件(更安全用 mv)

find /var/log -name "*.log" -mtime +30 -exec gzip {} \;

二、使用 logrotate(推荐,生产环境标准)

1. 查看已有配置

ls /etc/logrotate.d/
cat /etc/logrotate.d/syslog

2. 示例:自定义日志压缩配置

/var/log/myapp/*.log {
    daily
    rotate 30
    missingok
    notifempty
    compress
    delaycompress
    create 0640 app app
    sharedscripts
    postrotate
        systemctl reload myapp >/dev/null 2>&1 || true
    endscript
}

参数说明:

  • daily:每天轮转
  • rotate 30:保留 30 份
  • compress:压缩旧日志
  • delaycompress:延迟压缩(避免正在写入)
  • notifempty:空文件不轮转

3. 手动测试

logrotate -d /etc/logrotate.d/myapp   # 模拟
logrotate -f /etc/logrotate.d/myapp   # 强制执行

三、定时自动压缩(cron)

示例:每周压缩 7 天前日志

0 3 * * 0 find /var/log -name "*.log" -mtime +7 -exec gzip {} \;

四、高级:用 zstd(压缩率更高)

find /var/log -name "*.log" -mtime +7 -exec zstd {} \;

logrotate 也支持:

compresscmd /usr/bin/zstd

五、常见注意事项

  • 不要压缩正在写入的日志(用 copytruncate 或 reload)
  • 系统日志建议用 logrotate
  • 容器日志用 docker log-opt 或 journald

如果你能告诉我:

  • 日志路径(如 /var/log/nginx)
  • 是否服务正在写
  • 想要“只压缩”还是“压缩并删除”

我可以给你一份可直接用的配置。

0 踩