本腳原本自有學習阿銘的博文學習:工做中,須要用到日誌切割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 ##說明:因爲咱們須要按照日誌大小切割,因此這個腳本寫完後,須要每分鐘執行一次,建議添加到公司的監控系統中。