logrotate的compress功能默认调用系统gzip,若gzip未安装会导致压缩静默失败、轮转中断、磁盘空间未释放;需验证gzip存在性、检查配置中compress是否误启、排查cron日志及强制运行调试输出确认错误。

logrotate 本身是 Linux 系统自带工具,不依赖外部“压缩工具未安装”来报错——但它的 compress 功能默认调用 gzip。如果系统中没有 gzip(极少见),启用 compress 时会静默失败或报错,导致归档文件未压缩、日志轮转中断、磁盘空间未有效释放。排查重点不是“logrotate 未安装”,而是“压缩依赖缺失或配置异常”。
确认 gzip 是否可用
logrotate 的 compress 选项本质是执行 gzip -f 命令。先验证基础环境:
- 运行
gzip --version,有输出说明已安装;若提示command not found,需安装:yum install gzip -y(CentOS/RHEL)或apt install gzip -y(Debian/Ubuntu) - 检查
/usr/bin/gzip是否存在且可执行:ls -l /usr/bin/gzip - 手动测试压缩:
echo "test" > /tmp/test.log && gzip -f /tmp/test.log,成功后应生成/tmp/test.log.gz
检查 logrotate 配置中是否误启用了 compress
有些场景下并不需要压缩(如日志量小、或使用其他归档方式),但配置里写了 compress,而系统又无 gzip,会导致轮转失败却无明显报错。查看实际生效的配置:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 运行
logrotate -d /etc/logrotate.conf 2>&1 | grep -i "compress\|gzip",调试模式会显示是否尝试调用 gzip - 检查配置中是否混用
compress和copytruncate:若服务无法重载(如某些 Java 应用),常用copytruncate,此时必须配delaycompress,否则可能因 truncate 后立即 gzip 导致空压缩或失败 - 临时注释掉
compress和delaycompress,改用nocompress测试轮转是否恢复,可快速定位是否为压缩环节阻塞
查看 cron 执行日志与轮转痕迹
logrotate 由 /etc/cron.daily/logrotate 每日触发,失败通常留在系统日志里:
- 查 cron 日志:
grep "logrotate" /var/log/cron,看是否有执行记录和退出码(非 0 表示异常) - 查系统日志:
journalctl -u cron --since "2 days ago" | grep -i "logrotate\|gzip"或tail -20 /var/log/messages | grep -i "logrotate\|gzip" - 检查目标日志目录:
ls -lt /var/log/nginx/(以 Nginx 为例),观察是否生成了.1、.2等轮转文件,但缺少.gz后缀——说明切割成功,压缩失败
强制运行并捕获详细错误
跳过 cron,直接模拟执行,获取实时反馈:
- 用调试模式看全过程:
logrotate -d /etc/logrotate.d/nginx(替换为你实际的服务配置文件) - 若调试无报错,再用强制模式运行一次:
logrotate -f /etc/logrotate.d/nginx 2>&1,注意 stderr 输出中是否出现gzip: command not found或error: error running non-shared postrotate script类提示 - 特别注意:若配置中在
postrotate里调用了 gzip(非常规做法),也要检查该脚本内命令路径和权限










