在 Linux 下切割 Nginx 日志常见有几种方式,最常用的是 logrotate 和 手动脚本 + nginx 信号。下面按推荐程度说明。
Nginx 安装后,系统通常已经自带了 logrotate 配置。
cat /etc/logrotate.d/nginx
典型内容:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
logrotate -d /etc/logrotate.d/nginx # 模拟
logrotate -f /etc/logrotate.d/nginx # 强制执行
daily / weekly:切割周期rotate 14:保留 14 份compress:压缩旧日志notifempty:空日志不切postrotate:通知 Nginx 重新打开日志(关键)✅ 优点:自动、系统级、无需自己写脚本
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)
kill -USR1 $(cat /var/run/nginx.pid)
或:
nginx -s reopen
0 0 * * * /bin/mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +\%Y\%m\%d) && kill -USR1 $(cat /var/run/nginx.pid)
⚠️ 注意:% 在 crontab 中需要转义
Nginx 本身不支持按大小切割日志,必须靠外部工具:
logrotate 的 size 100M示例:
/var/log/nginx/*.log {
size 100M
rotate 10
compress
postrotate
kill -USR1 `cat /var/run/nginx.pid`
endscript
}
nginx 或 www-datarestorecon -R /var/log/nginx| 场景 | 推荐方式 |
|---|---|
| 生产环境 | ✅ logrotate |
| 临时调试 | 手动 mv + USR1 |
| 容器环境 | 外部日志收集(如 filebeat) |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。