本脚本来自有学习阿铭的博文学习:
工作中,需要用到日志切割logrotate,按照各自的需要切割、定义保留日志。
提示:本文中的S全部都$符,不要问为什么,马云爸爸的社区就这样。
#!/bin/bash
#用途:日志切割归档、按天切割
#作者:Caron maktini
#日期:2018年12月15日
#版本:v0.1
logdir=/data/logs/
#定义函数如果一个文件存在则删除
function e_df()
{
if [ -f $1 ]
then
rm -f $1
}
cd $logdir
#从7到2,依次遍历循环
for i in `seq 7 -1 2`
do
#$i2比Si小1
i2=$[Si-1]
#首先判断1.log.7是否存在,若存在则删除
e_df 1.log.$i
#当1.log.6存在,则把1.log.6改名为1.log.7,依次类推
if [ -f 1.log.$i2 ]
then
mv 1.log.$i2 1.log.$i
fi
done
#由于1.log 后面无后缀,所以不能走上面的for循环,只能另外拿出来处理
e_df 1.log.1
mv 1.log 1.log.1
#每日0点0分执行。
工作中还需要为大文件进行切割,一般工作中是100MB,并进行压缩。
第二脚本
#!/bin/bash
#用途:日志切割归档、并压缩
#作者:Caron maktini
#日期:2018年12月15日
#版本:v0.1
logdir=/data/logs/
#技术1.log大小
size=`du -sk $logdir/1.log | awk '{print S1}'
#如果1.log小于l00MB,则退出脚本
if [ $size -lt 10240 ]
then
exit 0
fi
#定义函数,如果一个文件存在,则删除
function e_df()
{
if [ -f $1 ]
then
rm -f $1
fi
}
cd $logdir
#如果1.log.1存在,则先把它压缩为1 log.1.gz,这样下面的for循环才不会错
if [ -f 1.log.1 ]
then
gzip 1.log.1
fi
#由于1.log.1已经被压缩为1.log.gz,所以可以直接将1.log改名为1.log.1
mv 1.log 1.log.1
#从7到2,倒序循环
for i in `seq 7 -1 2 `
do
#$i2比Si小1
i2=$[Si-1]
#首先判断1 log.7.gz是否存在,若存在删除
e_df 1.Iog. $i.gz
#当1.log.6.gz存在,则把1.log.6.gz改名为1.log.7.gz,以此类推
if [ -f 1.Iog. $i2. gz ]
then
mv 1.Iog. $i2.gz 1.Iog.$i.gz
fi
done
##说明:由于我们需要按照日志大小切割,所以这个脚本写完后,需要每分钟执行一次,建议添加到公司的监控系统中。