一聚教程网:一个值得你收藏的教程网站

热门教程

Nginx 中日志切割如何设置合适的文件保留策略防止历史日志无限堆积

时间:2026-08-24 11:34:49 编辑:袖梨 来源:一聚教程网

核心是控制保留天数、自动压缩与及时清理,7天为常用起点;rotate N 控制轮转文件数量而非精确天数;compress 与 delaycompress 可降磁盘占用60%–80%;postrotate 中需用 USR1 信号重开日志并校验 pid 路径;dateext、olddir、minsize、sharedscripts 等增强策略提升健壮性。

核心是控制保留天数+自动压缩+及时清理,7天是兼顾排查需求与磁盘压力的常用起点,但需根据合规要求和业务量动态调整。

明确保留天数并严格落地

logrotate 的 rotate N 参数直接决定保留几份历史日志。例如:

  1. rotate 7 → 保留最近7天(含当天切割出的1份 + 前6天的归档)
  2. rotate 30 → 满足多数审计场景,但需确认磁盘能否支撑
  3. rotate 180 → 符合国内网安法对 日志的最低留存要求,建议启用 compress + dateext 配合使用

注意:rotate 数值不是“保留N天”,而是“最多保留N个轮转文件”。若某天无新日志,不会生成新文件,实际保留天数可能略多于N。

必须启用压缩节省空间

未压缩的日志体积大、IO高。加这两行能减少60%–80%磁盘占用:

  1. compress:对旧日志用 gzip 压缩(生成 .gz 后缀)
  2. delaycompress:避免刚切割就压缩,留出窗口供临时排查(比如凌晨切割,当天日志还可能追加)

不压缩时,1GB access.log 切割7次就是7GB;压缩后通常只剩200–300MB。

确保 Nginx 正确重开日志文件

切割后若 Nginx 继续往旧文件句柄写入,会导致磁盘不释放、新日志丢失。关键动作在 postrotate:

  1. 发送 USR1 信号 给 Nginx 主进程,触发其重新打开 access.log 和 error.log
  2. 检查 pid 文件路径是否准确:/var/run/nginx.pid/usr/local/nginx/logs/nginx.pid,路径错则信号失效
  3. 加上 [ -f ... ] && 判断可避免因 pid 不存在导致脚本报错中断

按需补充增强项

让策略更健壮、更贴合实际运维习惯:

  1. dateext:让归档文件名带日期(如 access.log-20260819),比默认的数字序号更直观易查
  2. olddir:把旧日志移到独立目录(如 /var/log/nginx/backup),避免和当前日志混在一起
  3. minsize 100M:配合 daily 使用,小流量站点可设为“满100MB才切”,避免每天生成空文件
  4. sharedscripts:多个日志匹配时(如 *.log),只执行一次 postrotate,防止重复发信号

热门栏目