線上服務器 , 簡單的清除日誌腳本

新應用採用了新的日誌目錄 , 運維還不支持 , 所以只能自己手動加腳本了.

日誌格式: 不同目錄不同的日誌文件 .

app/ 下是應用日誌 , sql/ 下是數據庫日誌 , exp/ 下是異常日誌 .

每個目錄下的日誌文件名格式爲: xxx.log.yyyy-MM-dd

則腳本如下 cleanlog.sh:

清日誌腳本

#!/bin/sh

#日誌目錄
LOG_DIR=/path/to/logs
#不需要清除日誌的目錄 , 在目錄下加這個文件就可以了
NO_CLEAN=.noclean
#不需要壓縮日誌的目錄 , 在目錄下加這個文件就可以了
NO_TAR=.notar
#日誌保存的天數
RESERVE_DAYS=10

#取指定天數前的日期
DAY=`date -d -$RESERVE_DAYS"days" +%Y-%m-%d`

#遍歷所有的目錄及子目錄的日誌,先刪除舊的日誌文件
for dir in `ls $LOG_DIR`;do
    if [ -f $LOG_DIR/$dir/$NO_CLEAN ];then
      echo $NO_CLEAN" exist in "$LOG_DIR/$dir
    else
      # 刪除過期日誌
      rm -rf $LOG_DIR/$dir/*$DAY*
      echo "Old files removed from "$LOG_DIR/$dir
    fi
done
# 取昨天的日期
YESTERDAY=`date -d -1days +%Y-%m-%d`

# 遍歷所有的目錄及子目錄, 壓縮日誌文件
for dir in `ls $LOG_DIR`;do
    if [ -f $LOG_DIR/$dir/$NO_TAR ];then
      # 不需要壓縮的跳過
      echo $NO_TAR" exist in "$LOG_DIR/$dir
    else
      #進入到子目錄
      cd $LOG_DIR/$dir
      for file in `ls | grep $YESTERDAY"$"`;do
        # 壓縮日誌文件
        tar czf "$file".tar.gz $file
        # 刪除原日誌文件
        rm -rf $file
        echo $file" zipped in "$LOG_DIR/$dir
      done
    fi
done

crontab 命令

加 crontab 執行腳本, 創建文件 cron.cron(個人建議使用文件的方式創建cron , 可以適當做些註釋說明) , 添加如內容:

# 清除日誌腳本
30 2 * * * sh /path/to/scripts/cleanlog.sh

執行

最後執行crontab

crontab cron.cron

如果文章有幫助到您,請點個贊,您的反饋會讓我感到文章是有價值的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章