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

項目中出現的問題

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

解決方案的實現過程

獲取備份文件夾下的全部文件

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

find 對應目錄 -mtime +天數 -name "文件名" -exec rm -rf {} \;
複製代碼

實例命令:bash

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

說明:服務器

將/opt/soft/log/目錄下全部30天前帶".log"的文件刪除。ui

具體參數說明以下:spa

find:linux的查找命令,用戶查找指定條件的文件; /opt/soft/log/:想要進行清理的任意目錄; -mtime:標準語句寫法; +30:查找30天前的文件,這裏用數字表明天數; " ×.log":但願查找的數據類型,"×.jpg"表示查找擴展名爲jpg的全部文件,"×"表示查找全部文件,這個能夠靈活運用,觸類旁通; -exec:固定寫法; rm -rf:強制刪除文件,包括目錄; {} ; :固定寫法,一對大括號+空格++;code

解決問題的思路:開發

固然樓主固然不能傻乎乎的將備份目錄下的全部文件都刪除掉,這樣的話,備份不就失去了意義。 因此換一下思路便有了下面的命令部署

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

說明:string

獲取備份目錄下全部一天前帶":"的全部文件數量。

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 
複製代碼
相關文章
相關標籤/搜索