免费监控
logo prod

资讯与帮助

Nginx日志太大?自动归档+压缩脚本轻松搞定

时间:2025-07-17
编辑:tance.cc

Nginx日志管理.png

是不是经常发现磁盘空间不知不觉被“吃”光?你翻查才发现,全是 Nginx 日志文件在背后搞鬼。特别是流量稍微大点的站点,access.log 和 error.log 一天就能堆出几个 G。日志重要,但不处理,服务器就变成了“垃圾场”。难道只能靠手工清理?当然不是,自动归档+压缩才是专业运维的解决方案。怎么做?一套 Shell 脚本加上简单的定时调度,让日志管理从混乱变成有序。


为什么 Nginx 日志会让磁盘“爆仓”?

很多人以为 Nginx 日志就是点缀,其实日志生成速度远比你想象快:

  • 每一个 HTTP 请求都会被记录;

  • 只要有人访问,日志文件就不停增长;

  • 高峰期,1 小时生成 500MB~1GB 日志很正常。

更严重的是,Nginx 默认不会自动清理或切割日志,access.log 和 error.log 会无限增长。你不动手,它就会“吃”掉整个硬盘。硬盘满了?服务器直接“休克”。

日志记录必须有,但“怎么管理”才是关键。


日志管理的最佳实践:自动归档+压缩+删除旧日志

手动删除日志文件?误操作直接导致 Nginx 报错甚至宕机。正确的做法应该是:

  1. 定时归档:把当前正在记录的日志文件按日期归档保存。

  2. 压缩存档:归档后的日志立即压缩,节省存储空间。

  3. 定期清理:设置保留周期,自动删除超过30天的旧日志。

这个过程可以完全交给 Shell 脚本+Cron 自动完成,无需人工介入,系统稳定,磁盘健康。


实战:Shell 脚本打造自动日志管理系统

下面这份脚本,帮你轻松实现:

  • 日志按天归档;

  • 自动压缩为 .gz 文件;

  • 删除 30 天前的日志。

bash
#!/bin/bash# Nginx 日志路径LOG_DIR="/var/log/nginx"# 历史日志保存路径ARCHIVE_DIR="/var/log/nginx/archive"# 
确保存档目录存在mkdir -p $ARCHIVE_DIR# 切割 access.logmv $LOG_DIR/access.log $ARCHIVE_DIR/access_$(date +'%Y-%m-%d').log
# 切割 error.logmv $LOG_DIR/error.log $ARCHIVE_DIR/error_$(date +'%Y-%m-%d').log# 向 Nginx 
发送重载信号,重新生成新日志文件kill -USR1 $(cat /run/nginx.pid)# 压缩存档gzip $ARCHIVE_DIR/*.log# 
删除30天前的归档find $ARCHIVE_DIR -type f -name "*.gz" -mtime +30 -exec rm -f {} \;# 
记录操作日志echo "$(date '+%F %T') 已完成 Nginx 日志切割与压缩" >> /var/log/nginx_log_rotate.log

是不是觉得逻辑简单?但它背后解决了几个关键问题:

  • 不中断服务:日志归档后,Nginx 通过信号自动生成新日志,不影响正常记录;

  • 压缩+归档:减小体积,节省空间;

  • 旧日志清理:保证磁盘不会因日志爆满。


把自动化变成“常态”:配合 Cron 定时执行

让这套日志管理系统定期自动运行:

bash
# 每天凌晨1点自动执行0 1 * * * /usr/local/nginx_log_rotate.sh

从此之后,你不用再手工处理日志。即使是凌晨、节假日,服务器也会自动归档、压缩和清理。你的磁盘空间再也不会被日志偷走。


提升:加上邮件提醒+多日志目录支持

如果你希望进一步可控,可以在脚本中加入:

  • 邮件通知:每天执行完后,自动把结果发到运维邮箱;

  • 多项目日志归档:支持多站点日志分目录管理;

  • 压缩比例优化:用更高效的压缩工具(如xz)替换 gzip。

简单示例:添加邮件提醒

bash
mail -s "Nginx 日志归档完成" ops@example.com < /var/log/nginx_log_rotate.log

为什么日志管理自动化是必须的?

日志是服务器运行的重要记录,但管理不当,就会变成“炸弹”:

  • 服务器磁盘空间被吃光;

  • 系统日志无序堆积,难以定位故障;

  • 运维成本高,容易因为忘记清理而导致重大故障。

用 Shell 脚本+Cron 彻底自动化日志管理,相当于给服务器装上了“智能垃圾回收系统”。这样,日志既能完整保留,又不会压垮服务器,运维团队也从“扫地僧”变成了“系统总监”。


与其等磁盘告急时手忙脚乱,不如让服务器每天“自己打扫卫生”。日志管理不是问题,用自动化方法处理,才是专业。你还在手工删日志吗?不如让脚本帮你搞定这一切。


客服
意见反馈