Logrotate未生成压缩包通常因配置或条件未满足:检查compress是否启用、delaycompress是否等待二次轮转、missingok/ notifempty是否跳过,以及用-d调试确认具体原因。

Logrotate 没生成压缩包,通常不是“坏了”,而是配置或环境条件没满足。重点排查压缩是否被禁用、触发时机未到、或关键参数冲突——而不是直接怀疑工具本身。
检查 compress 是否被注释或显式禁用
这是最常见原因。打开主配置 /etc/logrotate.conf 或对应服务的配置文件(如 /etc/logrotate.d/nginx),确认以下两行状态:
- compress 行未被注释(即前面没有 #);
- 没有出现 nocompress(它会覆盖 compress)。
如果只写了 compress 但日志仍不压缩,再看下一条。
确认是否启用了 delaycompress 且尚未满足“二次轮转”条件
delaycompress 的作用是:本次轮转出的日志先不压缩,等下一轮再压缩上一轮的。它常和 copytruncate 配合使用(避免服务重启)。所以如果你刚配好、只轮转了一次,就不会看到 .gz 文件——要等第二次轮转后,第一次的归档才会被压缩。
验证方法:手动强制轮转两次:
- sudo logrotate -f /etc/logrotate.conf
- 再执行一次相同命令
- 然后检查 ls -l /var/log/*.1*,应能看到 .1.gz 而不仅是 .1
排查 missingok、notifempty 和日志文件实际状态
这三个参数会影响压缩是否发生:
- missingok:日志路径不存在时跳过,不报错也不压缩(但你根本看不到文件,自然没压缩包);
- notifempty:当前日志为空时跳过轮转——没轮转,当然没压缩包;
- 检查真实日志文件:ls -lh /var/log/your-app.log 确认它确实有内容且大小合理(比如 >1KB)。
若日志为空,可临时写入测试内容:echo "$(date) test" | sudo tee -a /var/log/your-app.log,再试轮转。
用 -d 调试模式看 logrotate 实际决策
运行调试命令,它会逐条告诉你“为什么没压缩”:
sudo logrotate -d /etc/logrotate.conf重点关注输出中类似这些行:
- compressing log with gzip → 压缩已启用并执行;
- log does not need rotating → 还没到轮转条件(时间或大小);
- skipping because of notifempty 或 skipping because of missingok → 明确告诉你跳过原因。
调试输出不修改任何文件,安全可靠,是定位问题的第一步。


















