delaycompress 使最新归档日志(如 app.log.1 或 dateext 下的 app.log-yyyymmdd)保持明文不压缩,仅压缩更早文件;须与 compress 同时启用,配合 dateext 时作用于最新日期文件,便于直接查看。

在 Logrotate 中启用 delaycompress 可以让日志压缩延迟一个轮转周期,即:当前轮转生成的旧日志(如 app.log.1)**暂不压缩**,仍保持明文(.log.1),而上一轮的(app.log.2)才被压缩为 app.log.2.gz。这样你就能直接用 cat、grep 或 less 查看最近一次归档的日志,无需先解压。
核心配置要点
delaycompress 必须与 compress 同时使用,否则无效;它只影响“压缩时机”,不改变轮转逻辑。典型配合如下:
-
compress:启用压缩功能(必需) -
delaycompress:推迟对最新归档文件(.1)的压缩,仅压缩 .2 及更老的 -
dateext或rotate N需合理设置,避免 .1 被覆盖前就触发新轮转
实际配置示例
假设管理 /var/log/myapp/app.log,每日轮转、保留 7 天、gzip 压缩:
/var/log/myapp/app.log {
daily
missingok
rotate 7
compress
delaycompress
dateext
dateformat -%Y%m%d
create 0644 root root
sharedscripts
postrotate
systemctl reload myapp.service > /dev/null 2>&1 || true
endscript
}
轮转后效果(按时间从新到旧):
-
app.log— 当前活跃日志 -
app.log-20240520— 昨日归档,未压缩(可直接查看) -
app.log-20240519.gz— 前日已压缩 -
app.log-20240518.gz— 更早均已压缩
注意:因启用了 dateext,文件名含日期而非数字序号,此时 .1 不会出现;delaycompress 在 dateext 模式下作用于「最新日期文件」——即刚生成的带日期的归档文件保持明文。
验证与调试技巧
运行前先测试配置是否生效:
-
logrotate -d /etc/logrotate.d/myapp— 干跑模式,输出详细决策过程,确认看到delaying compression提示 -
logrotate -f /etc/logrotate.d/myapp— 强制立即轮转一次,观察生成文件状态 -
file /var/log/myapp/app.log-*— 检查文件类型,确认最新日期文件是 “ASCII text”,其余是 “gzip compressed”
常见陷阱提醒
delaycompress 不解决磁盘空间突增问题——未压缩的 .1 文件仍占空间,需确保磁盘余量足够;若同时用 copytruncate,要留意它和 delaycompress 无冲突,但 copytruncate 本身不触发归档命名,仅清空原日志,真正的归档由轮转规则驱动。











