Nginx日志按天切割logrotate轮转配置教程
时间:2026-11-14 07:16 作者:emer 分类: Nginx
前言
Nginx 访问日志默认持续写入一个文件,时间一长体积巨大,查看和分析都困难,甚至占满磁盘。logrotate 是系统自带的日志轮转工具,按天切割、压缩旧日志、保留指定天数。本文讲解为 Nginx 配置按天切割、重载信号、验证轮转的完整配置。
操作步骤
1. 新建 Nginx 切割配置
vi /etc/logrotate.d/nginx
写入:
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 nginx adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
2. 参数说明
- daily:按天切割;rotate 30:保留 30 份;compress:压缩旧日志。
- postrotate:切割后发 USR1 信号让 Nginx 重新打开日志文件。
3. 手动测试一次轮转
logrotate -f /etc/logrotate.d/nginx
4. 查看切割结果
ls -lh /var/log/nginx/
5. 确认 logrotate 定时任务存在
cat /etc/cron.daily/logrotate
常见坑
- 切割后不发 USR1 信号,Nginx 仍写旧句柄,新日志进不了新文件。
- nginx.pid 路径与实际不一致,postrotate 命令失效。
- create 的属主属组写错,新日志无写入权限。
- rotate 天数设太短,历史日志查不到;太长又占磁盘。
- 只切割 access.log 漏了 error.log,通配 *.log 更稳妥。
- 自定义日志路径不在 /var/log/nginx,配置路径要改。
- 手动 -f 测试会立即切割,正式环境注意时机。
总结
Nginx 日志切割靠 logrotate:daily 按天、rotate 控制保留数、postrotate 发 USR1 让 Nginx 重开日志。配置后用 logrotate -f 测试,再看目录确认生成新文件。日志保留天数按合规和磁盘容量平衡,压缩旧日志节省空间。
遇到问题加QQ23979811 协助处理