一行命令搞定Nginx日志自动清理:告别磁盘爆满的烦恼
作为一名运维工程师,我经常遇到服务器磁盘空间告警的紧急情况。排查后发现,罪魁祸首往往是Nginx日志文件占用了大量空间。今天我就分享一个简单实用的解决方案——只需一行命令,就能实现Nginx日志的自动清理。
问题背景:为什么需要清理Nginx日志
记得上周,我收到监控系统发来的磁盘空间告警。登录服务器一看,/var/log/nginx
目录下的日志文件竟然占用了20GB空间!这些access.log和error.log文件如果不定期清理,不仅会耗尽磁盘空间,还会影响系统性能。
解决方案:一行命令搞定
经过多次实践,我找到了这个既简单又有效的命令:
find /var/log/nginx -name "*.log" -type f -mtime +7 -exec truncate -s 0 {} ;
让我来解释一下这个命令的各个部分:
find /var/log/nginx
:在Nginx日志目录中查找-name "*.log"
:匹配所有.log文件-type f
:只查找文件,不包括目录-mtime +7
:查找7天前的文件-exec truncate -s 0 {}
:将文件大小截断为0
实战演示:执行效果验证
在执行清理前,我们先检查一下当前日志文件的状态:
ls -lh /var/log/nginx/*.log
执行清理命令后,再次检查:
find /var/log/nginx -name "*.log" -type f -mtime +7 -exec truncate -s 0 {} ;
ls -lh /var/log/nginx/*.log
进阶用法:设置定时任务
为了让清理工作自动化,我们可以设置crontab定时任务:
# 编辑定时任务
crontab -e
# 添加以下内容,每天凌晨2点执行清理
0 2 * * * find /var/log/nginx -name "*.log" -type f -mtime +7 -exec truncate -s 0 {} ;
踩坑提示:重要注意事项
在实践中我踩过几个坑,希望大家注意:
- 使用
truncate
而不是rm
:直接删除日志文件会导致Nginx无法继续写入日志 - 先备份重要日志:清理前确保已经备份了需要分析的日志
- 测试环境验证:在生产环境执行前,务必在测试环境验证命令效果
这个简单的一行命令帮我解决了无数次磁盘空间危机,希望它也能成为你的运维工具箱里的利器。如果你有更好的方法,欢迎在评论区分享交流!
这命令太实用了,终于不用手动清日志了👍
truncate确实比rm安全,之前踩过坑,深有体会