在 Linux 上清理 Nginx 旧日志,常见做法有几种,取决于你是“直接删”还是“安全滚动”。下面按推荐程度说明。
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
}
logrotate -f /etc/logrotate.d/nginx
✅ 优点:
find /var/log/nginx -name "*.log.*" -mtime +7 -delete
含义:删除 7 天前的旧日志(如 .log.1、.log.gz)
> /var/log/nginx/access.log
> /var/log/nginx/error.log
⚠️ 注意:
rm 正在写入的日志可能导致 Nginx 继续写“已删除文件”nginx -s reload
如果你 重命名或删除 了日志文件,需要通知 Nginx:
nginx -s reopen
# 或
kill -USR1 $(cat /var/run/nginx.pid)
否则日志可能不会重新生成。
在 /etc/logrotate.d/nginx 中确保有:
rotate 14
或修改为你想要的天数。
如果是 Docker:
docker exec nginx truncate -s 0 /var/log/nginx/access.log
或挂载日志目录到宿主机后用 logrotate。
| 场景 | 推荐方式 |
|---|---|
| 生产环境 | logrotate |
| 临时清理 | find + mtime |
| 清空当前日志 | > log && nginx -s reopen |
如果你愿意,可以告诉我:
我可以给你一份精确命令。