這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
隨著伺服器運行,業務日誌不斷增長,之前文章提供的日誌器可對業務記錄檔進行按天、大小、普通三種模式切分,本指令碼是為解決伺服器儲存壓力,對日切分記錄檔進行定時清理與壓縮儲存,需要與crontab結合使用,指令碼中提供了crontab指令碼,可通過crontab -e進行添加,指令碼採用系統內建的tar壓縮為zip格式,壓縮比率約為原檔案1/4,記錄檔路徑需要對指令檔FILE_DIR宏進行設定,FILE_DIR_BACK為備份檔案路徑,DEL_FILE_NUM為任務執行清理自目前時間內的檔案,DEL_FILE_RET為保留的最近檔案數,指令碼運行參數如下:
test 用於測試,產生目標格式的記錄檔及壓縮檔
clear 用於清理檔案
backup 用於備份檔案
run 清理檔案同時備份檔案
crontab指令碼如下:
* 10 * * 1 sh /data/web/dsp-gateway/crontab.sh run > /data/web/dsp-gateway/crontab.txt
#!/bin/bash#@description 定時任務,以當前系統時間為基準,向前搜尋DEL_FILE_NUM個檔案,跳過最近DEL_FILE_RET個檔案#* 10 * * 1 sh /data/web/dsp-gateway/crontab.sh run > /data/web/dsp-gateway/crontab.txt#@author chenbintao#@data2017-07-1010:220.0.1初稿#2017-07-1011:310.0.2調試通過#2017-07-1014:410.0.3增加保留檔案壓縮及曆史壓縮檔清理#2017-07-1017:210.0.4最佳化清理流程,先進行檔案清理,再逐個壓縮檔清理原始檔案(tar -zcPf注意P參數的位置)#2017-07-1018:090.0.5增加運行環境檢測,及增加備份目錄,防止備份檔案被flume收集#2017-07-1018:200.0.6增加提示及版本資訊#2017-07-1019:200.0.7增加運行指令,支援清理與備份分離#2017-07-1021:010.0.8測實驗證通過#2017-07-1021:310.0.9增加日誌列印方法##VERSION=0.0.9#版本DEL_FILE_NUM=31#刪除檔案數(總共的刪除檔案數)DEL_FILE_RET=7#保留檔案間隔(目前時間多久不被刪除)FILE_DIR=/data/web/dsp-gateway/logs/#檔案目錄FILE_DIR_BACK=/data/web/dsp-gateway/logs/backup/#檔案目錄FILE_HEAD=(request response)#檔案名稱FILE_TAIL=(log)#檔案尾碼FILE_TAR=tar#壓縮檔尾碼PAR_TEST=test#測試模式參數PAR_CLEAR=clear#清理檔案PAR_BACKUP=backup#備份檔案PAR_RUN=run#正式運行####方法集function ifo(){echo "=======================================檔案清理/備份任務指令碼 V${VERSION}($0)======================================="echo "---0.模式選擇(test:產生測試,run:正式運行(清理&備份),clear:清理檔案,backup:備份檔案)"echo "---1.產生工具目錄"echo "---2.清理曆史檔案"}function clear(){echo "2.清理非保留原始/壓縮檔"for((i=${DEL_FILE_RET}+1;i<=${DEL_FILE_NUM};i++));do#計算時間file_date=`date -d -${i}day +%F`#遍曆檔案頭列表for j in ${FILE_HEAD[@]}; do#遍曆檔案尾碼列表for k in ${FILE_TAIL[@]}; do#組裝檔案名稱file_name=${j}.${k}.${file_date}#刪除原始檔案cd ${FILE_DIR}if [ ! -f "${FILE_DIR}${file_name}" ]; thenprintln '不存在檔案:'${FILE_DIR}${file_name}elseprintln '刪除檔案:'${FILE_DIR}${file_name}rm -rf ${FILE_DIR}${file_name}fi#刪除壓縮檔cd ${FILE_DIR_BACK}tar_flie_name=${file_name}.${FILE_TAR}if [ ! -f "${FILE_DIR_BACK}${tar_flie_name}" ]; thenprintln '不存在檔案:'"${FILE_DIR_BACK}${tar_flie_name}"elseprintln '刪除檔案:'"${FILE_DIR_BACK}${tar_flie_name}"rm -rf "${FILE_DIR_BACK}${tar_flie_name}"fidonedonedone}function backup(){echo "3.壓縮保留檔案並刪除原始檔案"for((i=1;i<=${DEL_FILE_RET};i++)); do#計算時間file_date=`date -d -${i}day +%F`#遍曆檔案頭列表for j in ${FILE_HEAD[@]}; do#遍曆檔案尾碼列表for k in ${FILE_TAIL[@]}; do#組裝壓縮檔名file_name=${j}.${FILE_TAIL}.${file_date}if [ ! -f "${FILE_DIR}${file_name}" ]; thencontinuefi#產生壓縮檔tar_flie_name=${file_name}.${FILE_TAR}cd ${FILE_DIR_BACK}if [ ! -f "${FILE_DIR_BACK}${tar_flie_name}" ]; thenprintln '壓縮檔:'"${FILE_DIR_BACK}${tar_flie_name}"tar -zcPf "${FILE_DIR_BACK}${tar_flie_name}" ${FILE_DIR}${file_name}elseprintln '已存在檔案:'"${FILE_DIR_BACK}${tar_flie_name}"fi#清理原始檔案rm -rf ${FILE_DIR}${file_name}println "刪除檔案:"${FILE_DIR}${file_name}donedonedone}function test(){echo "1.產生測試檔案"cd ${FILE_DIR}for((i=1;i<=${DEL_FILE_NUM};i++)); do#計算時間file_date=`date -d -${i}day +%F`#遍曆檔案頭列表for j in ${FILE_HEAD[@]}; do#遍曆檔案尾碼列表for k in ${FILE_TAIL[@]}; do#組裝檔案名稱cd ${FILE_DIR}file_name=${j}.${k}.${file_date}#建立原始檔案touch ${FILE_DIR}${file_name}#建立壓縮檔tar_flie_name=${file_name}.${FILE_TAR}cd ${FILE_DIR_BACK}tar -zcPf "${FILE_DIR_BACK}${tar_flie_name}" ${FILE_DIR}${file_name}#println "測試:建立檔案 ${FILE_DIR}${file_name} ${FILE_DIR_BACK}${tar_flie_name}"donedonedone}function println(){echo `date '+%Y-%m-%d %H:%M:%S'`":"$*}##############################################################################################運行代碼echo "0.運行前準備"cd ${FILE_DIR}if [ ! -d "${FILE_DIR}" ]; thenecho "日誌目錄不存在,退出!"exitfiif [ ! -d "${FILE_DIR_BACK}" ]; thenecho "備份目錄不存在,建立!"mkdir -p ${FILE_DIR_BACK}fiifoif [ $# -gt 0 ];thenif [ $1 == ${PAR_TEST} ];thentestexitelif [ $1 == ${PAR_RUN} ];thenclearbackupexitelif [ $1 == ${PAR_CLEAR} ];thenclearexitelif [ $1 == ${PAR_BACKUP} ];thenbackupexitfiecho "參數錯誤,退出!"exitfiexit
261 次點擊