温馨提示×

linux怎么清理nginx旧日志

小樊
37
2026-09-08 15:13:33
栏目: 智能运维

在 Linux 上清理 Nginx 旧日志,常见做法有几种,取决于你是“直接删”还是“安全滚动”。下面按推荐程度说明。


一、最推荐:使用 logrotate(系统自带,安全)

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

logrotate -f /etc/logrotate.d/nginx

✅ 优点:

  • 不会中断 Nginx
  • 自动压缩、保留 N 天
  • 生产环境标准做法

二、手动清理旧日志(不推荐但可用)

1️⃣ 删除 N 天前的日志

find /var/log/nginx -name "*.log.*" -mtime +7 -delete

含义:删除 7 天前的旧日志(如 .log.1.log.gz

2️⃣ 只清空当前日志(慎用)

> /var/log/nginx/access.log
> /var/log/nginx/error.log

⚠️ 注意:

  • 直接 rm 正在写入的日志可能导致 Nginx 继续写“已删除文件”
  • 清完后最好 reload:
nginx -s reload

三、让 Nginx 重新打开日志(重要)

如果你 重命名或删除 了日志文件,需要通知 Nginx:

nginx -s reopen
# 或
kill -USR1 $(cat /var/run/nginx.pid)

否则日志可能不会重新生成。


四、设置自动清理(推荐)

示例:只保留 14 天日志

/etc/logrotate.d/nginx 中确保有:

rotate 14

或修改为你想要的天数。


五、Docker 中的 Nginx(补充)

如果是 Docker:

docker exec nginx truncate -s 0 /var/log/nginx/access.log

或挂载日志目录到宿主机后用 logrotate。


总结建议 ✅

场景 推荐方式
生产环境 logrotate
临时清理 find + mtime
清空当前日志 > log && nginx -s reopen

如果你愿意,可以告诉我:

  • 系统(CentOS / Ubuntu)
  • 是否 Docker
  • 日志路径

我可以给你一份精确命令

0