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