在 Debian 上分割 Nginx 日志,常见做法有 logrotate(推荐) 和 手动脚本/cron 两种方式。下面按实用程度说明。
Debian 安装 Nginx 后,通常会自带 logrotate 配置:
/etc/logrotate.d/nginx
cat /etc/logrotate.d/nginx
典型内容示例:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
daily:每天分割rotate 14:保留 14 份compress:压缩旧日志notifempty:空日志不分割kill -USR1:通知 Nginx 重新打开日志文件(不重启 Nginx)logrotate -d /etc/logrotate.d/nginx # 模拟执行
logrotate -f /etc/logrotate.d/nginx # 强制执行
logrotate 本身由 cron 调用:
/etc/cron.daily/logrotate
如果你想 每天 0 点切割:
sudo nano /etc/logrotate.d/nginx
改为:
daily
dateext
并确保 cron 时间正确(一般不需要改)。
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)
kill -USR1 $(cat /var/run/nginx.pid)
crontab -e
0 0 * * * mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +\%Y\%m\%d) && kill -USR1 $(cat /var/run/nginx.pid)
修改 logrotate:
size 100M
或:
daily
size 100M
rm 日志文件 → Nginx 仍写入旧 inodekill -USR1www-data| 场景 | 推荐 |
|---|---|
| 普通服务器 | logrotate(默认) |
| 自定义时间 | logrotate + cron |
| 无 root | 脚本 + USR1 |
如果你愿意,我可以 根据你的 Nginx 版本和日志路径给你一份完整配置。