首页 / 新闻资讯 / 技术教程

Nginx 日志切割:logrotate 配置模板

2026-10-10分类:技术教程顺云运营

## 日志为什么要切割

Nginx 自身不会滚动日志文件,access.log 与 error.log 只会越写越大:占用磁盘、排查时打开卡顿,更麻烦的是统计脚本按天取文件时无据可依。logrotate 是发行版自带的日志轮转工具,按天或按大小切割、压缩归档、超期删除,配置一次长期生效。它由系统的每日定时任务驱动,不需要额外的守护进程,切割、压缩、清理的动作都在配置文件里声明清楚。

## 配置模板

Nginx 官方包通常自带 /etc/logrotate.d/nginx,自编译安装则需要自己补一份,模板如下:

/var/log/nginx/*.log {
    daily
    rotate 14
    missingok
    notifempty
    compress
    delaycompress
    dateext
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
    endscript
}

各字段含义:daily 按天切割;rotate 14 保留十四份旧文件;compress 压缩归档,delaycompress 让最近一份先不压缩,方便直接查看;dateext 在文件名后缀加日期,定位直观;missingok 与 notifempty 处理文件不存在或为空的边界情况。关键在 postrotate 里的 USR1 信号:切割是改名动作,Nginx 进程仍握着旧文件句柄继续写入,USR1 通知它按新路径重新打开日志文件,不重启发服务。

## 怎么确认生效

logrotate 由系统的每日定时任务驱动,不想等就手动验证:logrotate -d 配置文件是干跑模式,只输出计划动作不动文件;logrotate -f 配置文件强制立即执行一次。执行后 ls 日志目录,应看到带日期的归档与全新的空日志,向新文件写入一条请求后确认内容在增长,说明句柄已切换。再抽查归档文件解压后内容完整,切割链路就算验证通过。高流量站点按天切割也要估算单日体积,给日志目录单独规划容量,避免与业务数据互相挤占。

## 注意事项

保留份数按日志量定,高流量站点按天切割仍可能单文件几个 G,可以改成按小时或按大小切割。日志也是磁盘杀手,切割之外建议在顺云控制台给磁盘使用率配上告警,归档目录单独规划容量。自编译安装时注意 pid 文件路径与实际一致,路径写错导致信号发不出去,旧句柄不释放,就会出现磁盘占用仍在涨但新文件为空的怪象。

技术教程