首页/系统/信创系统运维速查/logrotate 日志轮转配置
服务与运维65 条

logrotate 日志轮转配置

应用自管日志用 logrotate 控制周期、保留份数与压缩:/etc/logrotate.d/ 下加规则文件,按 daily/weekly、rotate N、compress 组合,配套 create 与 postrotate 保证新文件权限与进程重开。

信创系统运维速查系统更新于 2026-10-13

logrotate 是什么

logrotate 负责给日志做轮转:按周期把当前日志改名归档、按保留份数删掉最旧的、可选压缩,并创建新的空文件让应用继续写。应用自己写文件、不接管日志系统的场景都靠它,否则一个日志文件迟早能把分区写满。规则以单独文件放在 /etc/logrotate.d/ 下,由定时机制每天触发一次;写规则时除了轮转参数,还要考虑新文件的属主权限和让应用重新打开文件,否则轮转后应用可能写不进去。

基本信息

规则目录/etc/logrotate.d/ 下的独立规则文件
触发方式由系统定时机制每日触发,具体单元视发行版而定
状态文件记录上次轮转时间,位置因发行版而异
常用动作续期轮转、按周期轮转、压缩归档、限制保留份数
权限改规则与强制执行需 root
适用平台Kylin V10 / UOS / openEuler 均预装

典型使用场景

  • 自研应用日志治理:应用自己写文件且不做轮转,交给系统统一管理
  • 控制磁盘占用:限制保留份数与压缩归档,避免日志无限增长
  • 审计留存:按合规要求设定保留周期,兼顾容量
  • 压缩冷日志:老文件自动压缩,节省空间同时保留可查性
  • 轮转后平滑续写:配合应用重载或截断方式保证继续写入
  • 排障验证:用演练模式确认规则行为,避免直接生效造成意外

规则示例

规则示例
/var/log/myapp/*.log {      # 匹配要轮转的日志文件
    daily                    # 每天轮转一次
    rotate 14                # 保留 14 份归档
    compress                 # 老文件压缩
    delaycompress            # 最近一份先不压,避免应用仍持有
    missingok                # 文件不存在不算错误
    notifempty               # 空文件不轮转
    create 0640 appuser appuser   # 新建文件的属主与权限
    sharedscripts            # 匹配多个文件时脚本只跑一次
    postrotate
        systemctl reload myapp >/dev/null 2>&1 || true
    endscript
}

手动验证

手动验证
logrotate -d /etc/logrotate.d/myapp     # 演练:只打印将要执行的动作
logrotate -f /etc/logrotate.d/myapp     # 强制执行一次
ls -lh /var/log/myapp/                  # 核对归档与新文件是否出现
journalctl -u myapp -n 30 --no-pager    # 确认应用轮转后仍正常写日志

常用指令读法

指令作用使用提示
daily / weekly轮转周期按日志增长速度选择
rotate 份数保留归档数量结合留存要求与容量计算
compress压缩归档文件节省空间,查询时需解压
delaycompress延迟压缩最近一份适合应用可能仍持有文件的情况
missingok文件不存在不报错避免因日志暂未生成而告警
create 权限轮转后新建文件属主与权限写错会导致应用写不进去
sharedscripts脚本只执行一次匹配多个文件时必要
copytruncate复制后截断原文件会丢少量行,优先让应用重开文件
轮转之所以要通知应用,是因为进程持有的是文件句柄:日志文件被改名后,进程仍在写旧文件,新文件空着,看起来像日志丢了。让应用重载或重开文件是首选做法;应用确实不支持重开时,才考虑先复制再截断原文件的方案。
修改规则后不要直接等定时触发,先用演练模式看一遍将要执行的动作,再手工强制执行一次确认文件权限与续写都正常。不验证就上线,最常见的后果是应用轮转后再也写不进日志,问题往往隔天才被发现。

易错点

  • 新建文件的属主与权限写错,轮转后应用没有写权限,日志从此断档
  • 轮转后不通知应用重开文件,进程继续写被改名的旧文件,新日志一直是空的
  • 保留份数按默认值设定且开启压缩之外不做容量评估,归档仍可能占满分区
  • 复制截断方案用于高频写入的大型日志,截断瞬间丢失部分行,事后无法补回

数据来源与参考

  • man 8 logrotate
  • man 5 logrotate.conf
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌