線上問題解決及shell指令碼實現自動保留最近n次備份記錄

haifeiWu發表於2017-12-08

專案中出現的問題

某天上午伺服器出現卡頓特別嚴重,頁面載入速度奇慢,並且某些頁面重新整理出現404的問題,就連伺服器的tab命令的自動提示都出現了問題,樓主費了九牛二虎之力,根據伺服器排查發現,伺服器資料盤出現100%被佔用的問題,導致該問題出現的原因是,Jenkins每次部署伺服器的時候,都會自動將上一次的war備份,由於開發階段的頻繁部署,最終硬碟被佔滿,便出現上述描述的情況。

解決方案的實現過程

獲取備份資料夾下的所有檔案

根據Google爸爸的提示,樓主找到了下面的命令,

find 對應目錄 -mtime +天數 -name "檔名" -exec rm -rf {} \;
複製程式碼

例項命令:

find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
複製程式碼

說明:

將/opt/soft/log/目錄下所有30天前帶".log"的檔案刪除。

具體引數說明如下:

find:linux的查詢命令,使用者查詢指定條件的檔案; /opt/soft/log/:想要進行清理的任意目錄; -mtime:標準語句寫法; +30:查詢30天前的檔案,這裡用數字代表天數; " ×.log":希望查詢的資料型別,"×.jpg"表示查詢副檔名為jpg的所有檔案,"×"表示查詢所有檔案,這個可以靈活運用,舉一反三; -exec:固定寫法; rm -rf:強制刪除檔案,包括目錄; {} ; :固定寫法,一對大括號+空格++;

解決問題的思路:

當然樓主當然不能傻乎乎的將備份目錄下的所有檔案都刪除掉,這樣的話,備份不就失去了意義。 所以換一下思路便有了下面的命令

find ${BAK_HOME} -mtime +1 -name "*:*" | wc -l
複製程式碼

說明:

獲取備份目錄下所有一天前帶":"的所有檔案數量。

find ${BAK_HOME} -mtime +1 -name "*:*"
複製程式碼

說明:

獲取備份目錄下所有一天前帶”:”的所有檔案數量。

到了這裡我們的問題差不多就可以解決了。so,請接著往下看:

解決方案的思路及shell指令碼的實現

思路

目前解決該問題的方法是在原來部署指令碼中新增一段指令碼,實現保留最近10次部署的備份記錄,超過10次的備份記錄將被刪除.

shell指令碼的實現

邏輯很清晰,思路很明瞭,我就不在這裡接著闡述了,謝謝大家!

#!/bin/sh
BAK_HOME="/home/saveHistoryData/iam-share-8083"

keepNum=5
fileNum=$(find ${BAK_HOME} -mtime +1 -name "*:*" | wc -l)

echo "${fileNum}"

for file in $(find ${BAK_HOME} -mtime +1 -name "*:*"); do
    if test $[fileNum] -gt $[keepNum];then
       rm -rf ${file}
       fileNum=${fileNum}-1
       echo "delete backup file"
    else
       echo "do no thing"
    fi
done 
複製程式碼

相關文章