在 Linux 下“切割 Nginx 日志”常见有三种方式:logrotate(推荐)、手动脚本 + reload、Nginx 自带 reopen。下面按实用程度说明。
Nginx 通常自带 logrotate 配置:
/etc/logrotate.d/nginx
示例配置(可修改):
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
logrotate -d /etc/logrotate.d/nginx # 模拟
logrotate -f /etc/logrotate.d/nginx # 强制执行
✅ 优点:自动、稳定、系统级支持
#!/bin/bash
LOG_PATH=/var/log/nginx/access.log
DATE=$(date +%Y%m%d)
mv $LOG_PATH ${LOG_PATH}.${DATE}
kill -USR1 $(cat /var/run/nginx.pid)
加入 crontab:
0 0 * * * /usr/local/bin/cut_nginx_log.sh
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%F)
kill -USR1 $(cat /var/run/nginx.pid)
✅ 不重启 Nginx
❌ 需自己写调度
| 场景 | 推荐方式 |
|---|---|
| 服务器常规部署 | logrotate |
| 自定义命名 | 脚本 + USR1 |
| Docker | 挂载卷 + logrotate |
如果你告诉我:
我可以给你完全可复制的配置。