在 Debian 上,Nginx 日志切割常见有三种方式:
下面重点讲最常用、最规范的做法:logrotate。
which logrotate
Debian 中通常已存在:
/etc/logrotate.d/nginx
内容示例(Debian 默认):
/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:每天切割rotate 14:保留 14 天compress:压缩旧日志notifempty:空日志不切postrotate:通知 Nginx 重新打开日志(必须)logrotate -d /etc/logrotate.d/nginx # 模拟执行
logrotate -f /etc/logrotate.d/nginx # 强制执行
#!/bin/bash
LOG_PATH=/var/log/nginx
DATE=$(date -d yesterday +%Y-%m-%d)
mv $LOG_PATH/access.log $LOG_PATH/access-$DATE.log
mv $LOG_PATH/error.log $LOG_PATH/error-$DATE.log
# 通知 Nginx 重新打开日志
kill -USR1 $(cat /var/run/nginx.pid)
0 0 * * * /usr/local/bin/nginx_log_rotate.sh
✅ 必须执行:
kill -USR1 `cat /var/run/nginx.pid`
或
nginx -s reopen
确保:
www-data:adm✅ 生产环境:
使用 Debian 自带的
/etc/logrotate.d/nginx
✅ 简单可靠
✅ 无需额外依赖
如果你愿意,我可以: