切割(rotate)Nginx 日志通常有三种常见方式:Nginx 自带信号方式、logrotate、自定义脚本。下面按推荐程度给你详细说明。
logrotate(最常用,生产首选)大多数 Linux 发行版已经自带 logrotate,非常适合自动切割、压缩、删除旧日志。
创建 /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
nginx -s reopen
endscript
}
| 参数 | 含义 |
|---|---|
daily |
每天切割 |
rotate 30 |
保留 30 天 |
compress |
压缩旧日志 |
notifempty |
空文件不切割 |
create |
新日志文件权限 |
nginx -s reopen |
通知 Nginx 重新打开日志文件 |
logrotate -d /etc/logrotate.d/nginx # 调试
logrotate -f /etc/logrotate.d/nginx # 强制执行
✅ 优点
mv /var/log/nginx/access.log /var/log/nginx/access.log.2026-01-21
nginx -s reopen
或者:
nginx -s reopen
#!/bin/bash
LOG_PATH="/var/log/nginx/access.log"
DATE=$(date +%F)
mv $LOG_PATH ${LOG_PATH}.$DATE
nginx -s reopen
然后加入 crontab:
0 0 * * * /usr/local/bin/cut_nginx_log.sh
⚠️ 缺点
USR1 信号(原理说明)Nginx 的日志切割本质是:
重命名日志文件 + 发送 USR1 信号
kill -USR1 $(cat /var/run/nginx.pid)
nginx -s reopen 本质就是发送 USR1。
原因:
nginx -s reopen✅ 解决:
access.log → stdout| 场景 | 推荐方式 |
|---|---|
| 生产环境 | ✅ logrotate |
| 临时/测试 | nginx -s reopen |
| 特殊定制 | 自定义脚本 |
如果你愿意,我可以:
直接告诉我你的环境即可。