Linux 实用小脚本系列(4)--使用脚本自动切割NGINX日志
这里的切割的意思是将NGINX的access和error这两个主要日志按照天数压缩并存放在一个专门的目录内,并将超过10天的日志自动删除。大家都知道,每天都是以0点0分0秒为界限,分隔天数,因此,脚本的执行时间也就为每天的0点0分(crontab默认不支持秒级任务的哦),下面上代码。
使用了set -eu,表示该脚本遇到错误会停止,防止后续破坏,同时检查脚本内的变量,变量值为空则脚本停止运行。以保证最后一行不会遇到空值对系统造成损害,set -o pipefail 检查管道命令,防止set -e的漏检现象。
首先定义了两个变量。一个是日期的变量,一个是指定日志文件的原始路径。
如果,该原始路径下没有cut文件夹,那么新建cut这个文件夹。
将这两个NGINX所产生出来的日志文件移动到cut文件夹下,在移动的同时以当前日期为名重命令文件。
由于是移动了文件,所以重新加载服务使得NGINX继续生成日志。
压缩所移动并重命名的两个文件,压缩名为当前日期+bz2。(需要注意一点,最小化安装的系统并没有bzip2命令,请yum安装bzip2,否则脚本无法执行,也就是执行 yum install bzip2 -y 命令)
删除原文件,免得占用空间、
倒数第三行的 /bin/sh /usr/local/nginx/logs/cut_nginx_log.sh 这个是脚本的路径和名称,请根据自己实际情况修改
crontab定时任务,每天的0点0分执行该脚本。
删除10天以上的压缩日志文件。