清理 nginx 日志常见有几种方式,按「是否保留历史、是否自动清理」给你一个完整说明。
rm -f /var/log/nginx/access.log
rm -f /var/log/nginx/error.log
⚠️ 风险:nginx 可能仍然占用文件句柄,日志不会立刻释放磁盘空间。
> /var/log/nginx/access.log
> /var/log/nginx/error.log
或:
truncate -s 0 /var/log/nginx/access.log
✅ 好处:不删除文件,nginx 可继续写入。
logrotate(最标准做法)cat /etc/logrotate.d/nginx
常见配置示例:
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx
endscript
}
| 参数 | 含义 |
|---|---|
| daily | 每天轮转 |
| rotate 30 | 保留 30 天 |
| compress | 压缩旧日志 |
| notifempty | 空文件不轮转 |
| postrotate | 轮转后 reload nginx |
logrotate -f /etc/logrotate.d/nginx
清理或轮转日志后,一定要让 nginx 重新打开日志文件:
nginx -s reload
# 或
systemctl reload nginx
否则可能出现:
find /var/log/nginx -name "*.log" -mtime +30 -delete
可加入 crontab:
0 3 * * * find /var/log/nginx -name "*.log" -mtime +30 -delete
access_log off;
error_log /var/log/nginx/error.log warn;
lsof | grep deleted
解决:
systemctl reload nginx
truncate -s 0 $(docker inspect --format='{{.LogPath}}' 容器名)
| 场景 | 推荐方式 |
|---|---|
| 生产环境 | logrotate |
| 临时清理 | truncate |
| 控制日志大小 | 日志级别 + 轮转 |
| 自动化 | cron + logrotate |
如果你愿意,可以告诉我:
我可以帮你定制一套最合适的清理方案。