Nginx跑久了,日志文件吃起磁盘来简直不讲道理。如果不定期清理,一个不小心就把你硬盘塞满,到时候服务挂了都不知道去哪哭。那么问题来了——怎么干净利落地搞定这些日志文件?其实有好几种路子可以走,从自动轮转到手动定时清空,总有一款适合你的运维习惯。

Nginx日志管理:如何定期清理日志文件

方法一:用 logrotate 工具,省心又专业

logrotate 算是 Linux 系统下管理日志的标配工具了,能自动帮你压缩、轮转、甚至删掉过期的日志。安装也很简单,如果还没装:

sudo apt-get install logrotate   # Debian/Ubuntu
sudo yum install logrotate        # CentOS/RHEL

装好之后,关键一步是配置。编辑 /etc/logrotate.d/nginx 这个文件,写入下面这段配置:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
}

稍微解释一下每个参数的意思:

配置写完后,跑一下强制测试,确保语法没问题:

sudo logrotate -f /etc/logrotate.d/nginx

方法二:自己写 Cron 任务,掌握绝对控制权

如果你对 logrotate 不放心,或者就想手撸一个简单的清理脚本,那就用 Cron 吧。先打开 cron 编辑器:

crontab -e

然后塞一行定时任务,比如每天凌晨2点清空日志文件(不是删除,只是截断内容):

0 2 * * * find /var/log/nginx -type f -name "*.log" -exec truncate -s 0 {} \;

这段命令的意思是:在 /var/log/nginx 目录下找到所有 .log 文件,然后把它们的大小截断为0——本质上就是清空。优点是不用装额外工具,缺点是没有压缩备份,如果你需要查旧日志,得提前做好归档。

方法三:在 Nginx 配置里微调缓冲,间接控制

严格来说,这不是“清理”日志,而是通过调整刷新频率让日志文件不那么容易膨胀。编辑 Nginx 主配置文件 /etc/nginx/nginx.conf,在 http 块里设置:

http {
    ...
    access_log /var/log/nginx/access.log main buffer=32k flush=300s;
    error_log /var/log/nginx/error.log warn;
    ...
}

关键参数是 flush=300s,每300秒(5分钟)才会把缓冲区里的日志刷到磁盘一次。这样做能减少磁盘I/O压力,但日志文件的增长速度本身并没有变慢。所以这个方法更偏向“性能优化”,而不是真正的日志清理。想省磁盘空间,还得靠前面两种方法。

几点需要留意的

说到底,日志管理是个细水长流的活儿。选一种顺手的方法,配上合适的轮转策略,就能让系统一直保持清爽高效。别等到磁盘报警了才想起来去搞,那时候可就手忙脚乱了。

本文转载于:https://www.yisu.com/ask/26890846.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。