[script]備份排程

保留5個備份檔, 把最舊的刪除

#!/bin/bash
mkdir /web/backup
cd /opt
NEWFILE="`date +%Y%m%d-%H%M`"
TARGET="/web/backup"
FILES_LIMIT=5
# backup httpd  data
tar -zcf $TARGET/web_$NEWFILE.tar.gz webdir
FILES_NUM=`/bin/ls -l $TARGET |grep "gz" |wc -l`
# Delete over files
cd $TARGET
for d in `ls`
do
        if [ $FILES_NUM -gt $FILES_LIMIT ]; then
             BACKUP_LIST=`ls -tr *gz`
             DEL_FILE=`echo $BACKUP_LIST | cut -d ' ' -f 1 | head -1`
             rm -f $DEL_FILE
             FILES_NUM=`/bin/ls -l $TARGET |grep "gz" |wc -l`
        fi
done
chown backup /web/backup/*

服務上版時自動下載當日過版程式

將下列內容存成檔案, 並授予執行權限, 放置於 /usr/local/bin底下, 可以直接呼叫執行

#!/bin/bash
#
###########################################################
#                                                         #
#           長穩服務上版時自動下載當日過版程式            #
#                    V1.0.20210531                        #
#                        Aliok                            #
#                                                         #
###########################################################
#
if [ "$1" == "y" ]; then
  now="$(date -d 'yesterday' +'%y%m%d')"
  else now="$(date  +'%y%m%d')"
fi
echo "$now"
NAS="192.168.7.51"
workpath="$(pwd)"
svc=${workpath##*/}

## 下載資料夾(down load folder)判別目標資料夾是否存在, 存在則下載,不在則秀訊息 ##
function down_load_dir() {
       if [ -d $1 ];then
         continue
       else  scp -r sysbk@"$NAS":/volume1/IFSD/Release/$svc/$1 . && echo 下載$1
       fi
}

## 檢查當天日期現有資料夾名稱(check release),以下載最新的Release,避免重複下載 ##
function chk_release() {
local nas_dir=`ssh sysbk@"$NAS" 'ls /volume1/IFSD/Release/'$svc/`
for chk_today_dir in  $nas_dir
  do
    if [ -d `echo $chk_today_dir | grep $now` ]; then
      continue
      else down_load_dir  $chk_today_dir
    fi
  done
    echo "沒有新資料"
}


#判別所在位置是否為工作目錄(/var/icw),不正確則不執行
for chkdir in `ls /var/icw`
  do
    if [ /var/icw/$chkdir == $workpath ];
      then echo "現在工作目錄=>$chkdir"
          chk_release && exit 0
    fi
  done
echo 你的工作目錄不正確

程式過版用的遠端下載腳本

因為經常需要進行程式過版, 所以要從NAS中下載該服務的當日版號的release, 亦或者是當天修正的2版或3版(目前還沒看過當天4版), 所以在偷懶效率的前提下, 寫了一支script, 來加速作業並簡化指令。

#!/bin/bash
now="$(date +'%m%d')" #取得當天的日期
pah="$(pwd)" #所在位置字串
svc=${pah##*/} #所在位置取最後字串,即服務名稱

## 判別目標資料夾是否存在, 存在則下載,不在則秀訊息##
function ftpm() {
# 判別資料夾是否存在
if ssh sysbk@192.168.7.51 test -e   /volume1/IFSD/Release/"$svc"/v1.0.21"$now".$1;
#若存在則進行下載到本地工作目錄
then scp -r sysbk@192.168.7.51:/volume1/IFSD/Release/"$svc"/*.21"$now".$1/ .
else echo "不存在 v1.0.21$now.$1" #若不存在則回應訊息
fi
}

#判別當天日期有幾個資料夾,以上傳最新的Release,避免重複上傳已存在的
function dlfnas() {
if [ -d *.21"$now".4 ]; then ftpm 5  #判別本地工作目錄內第4版資料夾是否存在,若存在則下載第5版
elif [ -d *.21"$now".3 ]; then ftpm 4  #判別本地工作目錄內第3版資料夾是否存在,若存在則下載第4版
elif [ -d *.21"$now".2 ]; then ftpm 3  #判別本地工作目錄內第2版資料夾是否存在,若存在則下載第3版
elif [ -d *.21"$now".1 ]; then ftpm 2  #判別本地工作目錄內第1版資料夾是否存在,若存在則下載第2版
else ftpm 1  #下載第1版
fi
}

#判別所在位置是否為工作目錄(/var/icw),不正確則不執行
for chksvc in `ls /var/icw`
do
if [ $chksvc == $svc ];then
echo "現在執行=>$chksvc"
dlfnas
exit 0
fi
done
echo 你的工作目錄不正確

更換letsencrypt的捷徑

因為每次更新let’s encrypt的免費憑證時, 都會產出不同的名稱, 以避免重複, 但對應的捷徑又沒有自動修正, 只有手動自己調, 但每次要調就需要偷懶效率, 所以就寫了一個簡易的腳本來自動執行

#!/bin/bash
 cd /etc/letsencrypt/live/i-chainwin.com
 for loop in cert chain fullchain privkey  ; do
    rm -f "$loop".pem
    ln -s ../../archive/i-chainwin.com/"$loop"$1.pem "$loop".pem
 done

參數可代入這次要變更成為哪一個版數(1,2或3)