Nginx 日志切割常见有 三种方式:logrotate(推荐)、手动脚本 + cron、Nginx 信号切割。下面按常用程度给你讲清楚,并附示例。
logrotate 是 Linux 自带工具,可自动按天/大小切割、压缩、删除旧日志,并 reload nginx。
sudo vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 30
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
| 参数 | 含义 |
|---|---|
| daily | 每天切割 |
| rotate 30 | 保留 30 天 |
| compress | 压缩旧日志 |
| missingok | 日志不存在不报错 |
| notifempty | 空日志不切割 |
| postrotate | 切割后执行(reload nginx) |
logrotate -d /etc/logrotate.d/nginx # 模拟执行
logrotate -f /etc/logrotate.d/nginx # 强制执行
✅ 优点:稳定、自动、无需写脚本
✅ 适合:生产环境
nginx 支持通过信号重新打开日志文件。
mv /var/log/nginx/access.log /var/log/nginx/access.log.2026-01-21
kill -USR1 $(cat /var/run/nginx.pid)
#!/bin/bash
LOG_PATH="/var/log/nginx/access.log"
DATE=$(date +%F)
mv $LOG_PATH ${LOG_PATH}.$DATE
kill -USR1 $(cat /var/run/nginx.pid)
crontab -e
0 0 * * * /usr/local/bin/nginx_log_cut.sh
✅ 优点:官方支持
❌ 缺点:需自己处理压缩、清理
不细讲,主要问题是:
| 场景 | 推荐方式 |
|---|---|
| 生产环境 | ✅ logrotate |
| 临时/简单 | nginx USR1 |
| 学习/测试 | 任意 |
如果你愿意,可以告诉我:
我可以给你 完全贴合你环境的配置。