在 Nginx 中,切割(rotate)日志文件通常不靠 Nginx 自身,而是借助 日志轮转工具 或 脚本 来完成。下面给你几种常用且可靠的方法,从“最推荐”到“临时方案”。
logrotate(生产环境标准做法)which logrotate
编辑或新建:
vim /etc/logrotate.d/nginx
示例配置(✅ 推荐):
/var/log/nginx/*.log {
daily
rotate 30
missingok
notifempty
compress
delaycompress
dateext
dateformat -%Y%m%d
create 0640 nginx nginx
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
| 参数 | 含义 |
|---|---|
| daily | 每天切割 |
| rotate 30 | 保留 30 天 |
| compress | 压缩旧日志 |
| dateext | 文件名加日期 |
| postrotate | 切割后 reload nginx |
logrotate -vf /etc/logrotate.d/nginx
✅ 优点
mv /var/log/nginx/access.log /var/log/nginx/access.log.2026-01-21
mv /var/log/nginx/error.log /var/log/nginx/error.log.2026-01-21
nginx -s reopen
# 或
kill -USR1 $(cat /var/run/nginx.pid)
✅ 优点
⚠️ 缺点
#!/bin/bash
LOG_PATH="/var/log/nginx"
DATE=$(date +%Y%m%d)
mv $LOG_PATH/access.log $LOG_PATH/access.log.$DATE
mv $LOG_PATH/error.log $LOG_PATH/error.log.$DATE
nginx -s reopen
crontab -e
0 0 * * * /bin/bash /usr/local/bin/nginx_log_rotate.sh
access.logkill -9 强制杀进程| 场景 | 推荐方式 |
|---|---|
| 生产环境 | ✅ logrotate |
| 临时维护 | 手动 + nginx -s reopen |
| 特殊需求 | 自定义脚本 |
如果你愿意,我可以:
只要告诉我你的 系统版本 + Nginx 部署方式 即可。