首页/系统/Linux 运维命令速查/logrotate 调试:-d 干跑与 -v 详查

logrotate 调试:-d 干跑与 -v 详查

轮转不生效先别改配置:-d 干跑显示「会做什么」,-v 观察真实执行细节,state 文件与 privilege 是两大常见坑。

Linux 运维命令速查系统更新于 2026-10-13

轮转不生效先别改配置

logrotate 是否轮转,取决于配置规则、状态文件里记录的上次轮转时间、文件属主与进程配合等多个环节,光看配置文件往往看不出问题。它自带的干跑与详查模式能直接打印判定过程:干跑告诉你「会做什么」,详查告诉你「实际做了什么」,是定位轮转问题最快的手段。

基本信息

适用平台Linux 各发行版(由 cron 或 systemd timer 触发)
语法logrotate -d | -v | -f 配置文件
状态文件通常位于 /var/lib/logrotate/ 下,记录每个日志上次轮转时间
触发方式定时任务按天或按小时执行,单条日志还有 size 等条件

典型使用场景

  • 日志文件一直变大,怀疑轮转根本没执行
  • 刚改了轮转配置想立即验证,不等下一轮定时任务
  • 轮转后进程仍写旧文件、磁盘空间没释放
  • 新增了自定义日志,需要确认规则是否被匹配到
  • 排查日志文件属主或权限在轮转后发生变化

调试流程

调试流程
sudo logrotate -d /etc/logrotate.d/nginx    # 干跑:逐步打印判定过程,不实际执行
sudo logrotate -v /etc/logrotate.d/nginx    # 实际执行并打印细节
sudo logrotate -vf /etc/logrotate.d/nginx   # 忽略时间条件强制轮转
sudo cat /var/lib/logrotate/status | grep nginx   # 看状态文件里记录的上次轮转时间
sudo systemctl list-timers | grep -i logrotate    # 确认定时触发是否启用
ls -l /var/log/nginx/                        # 核对轮转结果与属主

检查配置

检查配置
sudo logrotate -d /etc/logrotate.conf 2>&1 | head -40   # 看全局配置与包含关系
awk '{print FILENAME": "$0}' /etc/logrotate.d/nginx | head -30   # 逐行核对规则
sudo journalctl -u logrotate --since today               # 定时任务侧的执行记录

常见症状与原因

现象常见原因处理
到点没轮转时间条件未满足或状态文件记录较新先干跑看判定,必要时用 -f 验证
轮转成功但空间没释放进程仍持有旧文件句柄没重开检查 postrotate 的通知命令或改用复制截断模式
新日志属主变成 root轮转后重建文件与进程属主不一致确保新建文件继承原属主
配置改了不生效语法错误被静默跳过干跑会打印解析错误,先修语法
logrotate 由定时任务触发,刚改完配置要等下一轮;用 -f 可以立刻验证一次,但会真实执行轮转,生产上注意影响。

易错点

  • 轮转成功但进程没重新打开日志,空间一直被旧句柄占着,磁盘照样满
  • 复制截断与新建文件两种模式混用时,新文件属主可能变成 root,服务再也写不进去
  • 只看配置文件不看状态文件,时间条件判断依据其实在状态文件里
  • 手工删除日志文件而不做截断,进程句柄仍指向已删除文件,空间不会释放

数据来源与参考

  • man 8 logrotate
  • man 5 logrotate.conf

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌