1. 程式人生 > >shell指令碼限制日誌檔案大小和行數

shell指令碼限制日誌檔案大小和行數

背景: 專案server在後端持續執行,日誌檔案不斷變大,需及時進行清空。

解決方案:編輯sh指令碼,指定時間間隔輪詢;將超出限制的日誌檔案,先備份,再清空原日誌檔案內容。

清空日誌檔案內容的方法有:

            1.  echo "" > test.log

            2. cat /dev/null > test.log

            3. cp /dev/null test.log

            4.  > test.log

            5. truncate -s 0 test.log

1.限制指定日誌檔案大小(1024*10位元組)

#!/bin/sh

function limit_size_log(){  
    local logfile=$1  
    local maxsize=$2 

    if [ ! -f "$logfile" ]; then
    sudo touch $logfile
    fi

    filesize=`ls -l $logfile | awk '{ print $5 }'`

    if [ $filesize -gt $maxsize ]

    then

        echo "$filesize > $maxsize"

        sudo cp $logfile $logfile"`date +%Y-%m-%d_%H:%M:%S`".log

        sudo cp /dev/null $logfile

    else

        echo "$filesize < $maxsize"

    fi

}

# running
while true
do
    limit_size_log /var/log/test.log (1024*10)
    sleep 60
done

 

2. shell 指令碼限制指定日誌檔案行數(10000行)

#!/bin/sh

function limit_count_log(){  
    local logfile=$1  
    local maxline=$2 

    if [ ! -f "$logfile" ]; then
    sudo touch $logfile
    fi
    linecount=`/usr/bin/wc -l $logfile|awk '{print $1}'`;  
    if [ ${linecount} -gt ${maxline} ];then    
        #delcount=`expr ${linecount} - ${maxline}`;       
        #sudo sed -i "1,${delcount}d" $logfile    
        sudo cp $logfile $logfile"`date +%Y-%m-%d_%H:%M:%S`".log
        sudo tar -czPvf $logfile"`date +%Y-%m-%d_%H:%M:%S`".log.tar.gz $logfile"`date +%Y-%m-%d_%H:%M:%S`".log
        sudo rm $logfile"`date +%Y-%m-%d_%H:%M:%S`".log
        sudo cp /dev/null $logfile
    else    
        echo  $linecount
    fi
}

# running
while true
do
    limit_count_log /var/log/test.log 10000
    sleep 60
done