温馨提示×

怎样批量清理nginx日志

小樊
49
2026-10-17 06:51:30
栏目: 编程语言

下面给你几种批量清理 Nginx 日志的常见做法,从“最安全”到“最激进”排序,你可以按业务场景选。


一、最推荐:使用 logrotate(标准做法 ✅)

Nginx 一般都会配合 logrotate 自动管理日志。

1. 查看现有配置

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
}

2. 手动执行一次

logrotate -f /etc/logrotate.d/nginx

✅ 优点:

  • 自动切割
  • 可保留 N 天
  • 不中断 Nginx

二、手动批量删除旧日志(简单直接)

删除 7 天前的日志

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

或只删 .gz 压缩日志:

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

⚠️ 注意:

  • 不要直接删正在写入的 access.log / error.log
  • 删完要 reload:
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 重新打开文件:

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

五、定时批量清理(crontab)

每天凌晨清理 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

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

  • 系统(CentOS / Ubuntu)
  • Nginx 安装方式(源码 / apt / yum)
  • 日志路径

我可以给你直接可执行的完整脚本。

0 踩