怎麼歸檔老日誌的shell腳本

本腳原本自有學習阿銘的博文學習:工做中,須要用到日誌切割logrotate,按照各自的須要切割、定義保留日誌。提示:本文中的S所有都$符,不要問爲何,馬雲爸爸的社區就這樣。
#用途:日誌切割歸檔、按天切割
#做者: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,並進行壓縮。bash

第二腳本函數

#!/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 

##說明:因爲咱們須要按照日誌大小切割,因此這個腳本寫完後,須要每分鐘執行一次,建議添加到公司的監控系統中。
相關文章
相關標籤/搜索