shell指令碼實現自動保留最近n次備份記錄
貼個廣告
樓主的部落格已全部搬遷至自己的部落格,感興趣的小夥伴請移步haifeiWu與他朋友們的部落格專欄
專案中出現的問題
某天上午伺服器出現卡頓特別嚴重,頁面載入速度奇慢,並且某些頁面刷新出現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