logrotate中启用compress与delaycompress组合即可安全自动压缩日志,前者开启gzip压缩,后者推迟一轮压缩以避免服务写入冲突,并需配合missingok、notifempty、create及postrotate等参数确保稳定运行。

直接在 logrotate 配置里启用压缩功能就能节省磁盘空间,关键不是“能不能压”,而是“怎么压得安全又省事”。
确认压缩支持已就绪
Linux 系统默认带 gzip,logrotate 会自动调用它压缩。你只需检查是否安装了基础压缩工具:
- 运行 gzip --version 确认存在(绝大多数系统自带)
- 如需 bzip2 或 xz 压缩,可额外安装:apt install bzip2 或 yum install xz
- logrotate 不需要手动指定压缩命令,除非你改用非默认算法(比如 compresscmd /usr/bin/xz)
在配置中正确启用压缩参数
压缩生效依赖两个配合使用的参数,单独写 compress 可能导致服务写日志出错:
- compress:开启压缩功能
-
delaycompress:延迟压缩——本次轮转产生的旧日志(如
access.log.1)不压缩,等下次轮转时再压缩成access.log.1.gz - 这样能避免正在被服务追加写入的日志(刚重命名的 .1 文件)被立刻压缩,防止 nginx、apache 等服务因文件被移动/压缩而报错或丢日志
为具体服务添加压缩配置(以 Nginx 为例)
编辑 /etc/logrotate.d/nginx,确保包含以下核心项:
- daily 或 weekly:设定轮转频率
- rotate 14:保留 14 份,避免无限制堆积
- compress 和 delaycompress:成对出现
- missingok 和 notifempty:减少误报和无效操作
- create 0644 www-data adm:新建日志时设好权限,防止服务无法写入
-
postrotate ... endscript:通知服务重新打开日志(如
systemctl reload nginx),保证新日志写入不中断
验证和调试配置是否生效
别等 cron 自动跑才发现配错了。动手前先模拟执行:
- 运行 logrotate -d /etc/logrotate.d/nginx:显示详细过程,但不真正操作(-d = debug)
- 加 -v 查看更完整输出:logrotate -dv /etc/logrotate.d/nginx
- 想立刻触发一次(比如刚改完配置):logrotate -f /etc/logrotate.d/nginx(-f = force)
- 检查结果:ls -lh /var/log/nginx/ 应能看到
*.log.1.gz类文件,且原*.log.1消失
不复杂但容易忽略细节,重点就是 compress + delaycompress 配合使用,再配上 postrotate 通知服务,整个流程就稳了。


















