在 Debian 上,Nginx 日志切割最推荐、最省事的方式是使用系统自带的 logrotate(Debian 默认已安装并集成 Nginx)。
下面分几种方式说明:
Debian 安装 Nginx 后,通常已有:
/etc/logrotate.d/nginx
内容一般类似:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}
daily:每天切割weekly:每周rotate 14:保留 14 份compress:压缩旧日志notifempty:空日志不切create:新建日志文件权限logrotate -d /etc/logrotate.d/nginx # 模拟执行
logrotate -f /etc/logrotate.d/nginx # 强制执行
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl kill -s USR1 nginx.service
endscript
}
Nginx 通过
USR1信号重新打开日志文件
如果你不用 logrotate,可以写脚本:
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)
kill -USR1 $(cat /var/log/nginx/nginx.pid)
然后用 crontab -e:
0 0 * * * /usr/local/bin/nginx_log_cut.sh
⚠️ 不推荐,维护成本高
kill -USR1 或 nginx -s reopenls -lh /var/log/nginx/
看到 access.log.1.gz 说明成功 ✅
如果你愿意,可以告诉我:
我可以直接帮你写一份完整配置。