下面给你几种批量清理 Nginx 日志的常见做法,从“最安全”到“最激进”排序,你可以按业务场景选。
logrotate(标准做法 ✅)Nginx 一般都会配合 logrotate 自动管理日志。
cat /etc/logrotate.d/nginx
典型内容:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
endscript
}
logrotate -f /etc/logrotate.d/nginx
✅ 优点:
find /var/log/nginx -name "*.log*" -mtime +7 -delete
或只删 .gz 压缩日志:
find /var/log/nginx -name "*.gz" -mtime +7 -delete
⚠️ 注意:
nginx -s reload
适合“日志太大,但想保留文件名”
truncate -s 0 /var/log/nginx/access.log
truncate -s 0 /var/log/nginx/error.log
或:
: > /var/log/nginx/access.log
✅ Nginx 会继续写入
❌ 不会释放磁盘(需 truncate)
清理后一定要让 Nginx 重新打开文件:
nginx -s reopen
# 或
kill -USR1 $(cat /run/nginx.pid)
每天凌晨清理 7 天前日志:
crontab -e
0 0 * * * find /var/log/nginx -name "*.log*" -mtime +7 -delete
access_log off;
error_log /dev/null;
⚠️ 仅适合测试环境
| 场景 | 推荐方式 |
|---|---|
| 生产环境 | logrotate |
| 临时释放空间 | truncate |
| 定期维护 | find + crontab |
| 测试环境 | access_log off |
如果你愿意,可以告诉我:
我可以给你直接可执行的完整脚本。