标签归档:logrotate

自动裁剪nginx log

今天博客莫名其妙开始报数据库连接错误,重启了之后也还是一样,一看mysql日志,看来又是老问题,硬盘空间被占满了。

每次都要等到出问题了再来删日志实在太麻烦,查了一下nginx也没有自带缩减日志的功能,查到有用logrotate来自动分割和压缩日志的,不过我只是想简单地把日志文件缩小,能看到最近的日志就够了,所以还是自己写个脚本。

代码很简单,用tail命令把日志文件的最后20000行裁出来存到新文件,然后用新的日志文件替换旧文件,把这个脚本放到cron的daily目录中每日执行一次即可

cd nginx日志目录
tail -n 20000 -q access.log > access.log.new
mv access.log.new access.log
tail -n 20000 -q error.log > error.log.new
mv error.log.new error.log

这段脚本把access.log和error.log都裁剪了。

要注意的是这种办法虽然简单,但是如果在tail执行的时候nginx又向日志文件写入了新的内容,这部分内容可能会被丢弃,所以只能用于我这种简单场景,对于日志有严格保存需求的场景不能使用该方法,应该用logrotate。