shell 實現自動備份nginx下的站點

shell 實現自動備份nginx下的站點html

優勢

  • 實現自動備份ngnix下的全部運行的站點
  • 自定義排除備份站點,支持三種排除
  • 自動維護備份目錄,防止備份目錄無限擴大
  • 備份壓縮tar.gz格式

   源碼: nginx

   

#!/bin/bash
#########################
# 功能:實現自動備份nginx下的站點
# 版本:v1.0
# 時間:2018/06/04
# 做者:百里
# 最後修改時間:2018/06/05
########################
set +x
######################################自定義參數###################################
#定義備份的目錄,無需/結尾
back_dir=/data/back/site_root
#定義站點目錄,無需/結尾
vhost_dir=/usr/local/nginx/conf/vhost
#定義文件名格式
back_file_name=`date +%Y%m%d`
#是否開啓備份,默認不備份,只顯示,傳1則備份
is_back=$1
#定義排除站點,必須是.conf結尾的後綴
exclude_site=("admin-laravel.sgfoot.com.conf" "car.cc.conf" "sync.conf" "jap.cc.conf" "wxadmin.sgfoot.com.conf")
#定義nginx配置文件含某關鍵字的不備份
exclude_keyword=("test" "asset")
#定義root站點目錄含某關鍵字的不備份
exclude_root_keyword=("test" "sgfoot")
#設置保存多少天
day=30
######################################業務邏輯#####################################
#定義站點數組
site_list=()
#獲取全部正在運行的站點名稱
i=0
for file_name in $vhost_dir/*
do
        name=`basename $file_name`
        ext="${name##*.}" #提取後綴     
        if [[ $ext == "conf" && ${exclude_site[@]} != *$name* ]] #排除非conf文件名
        then
                site_list[$i]=$name
                let "i++"
        fi
done
#排除含某關鍵字的站點
i=0
for file_name in ${site_list[@]}
do
        for key in ${exclude_keyword[@]}
        do
                if [[ $file_name == *$key* ]];then
                        unset site_list[$i]                     
                fi
        done
        let "i++"
done
#分析提取站點目錄
site_root_list=()
i=0
for file_name in ${site_list[@]}
do
        file=$vhost_dir"/"$file_name
        if [ -f $file ];then
        root=$(cat $file |grep "root"|awk '{print $2}')
        root=${root%%;*}
                if [ -e $root ];then
                        site_root_list[$i]=$root
                        let "i++"
                fi
        fi
done
#排除root站點含某關鍵字不備份
i=0
site_root_new=()
for file in ${site_root_list[@]}
do
        flag=0
        for key in ${exclude_root_keyword[@]}
        do
                if [[ "$file" == *$key* ]];then
                        flag=1
                        break
                fi
        done
        if [ $flag -eq 0 ];then
                file=${file%%public*} #解決laravel項目特殊狀況
                file=${file%%/} #去掉路徑後的/
                site_root_new[$i]=$file
                let "i++"
        fi
done
#去重
len=${#site_root_new[@]}
for((i=0;i<$len;i++))
do
  for((j=$len-1;j>i;j--))
  do
    if [[ ${site_root_new[i]} = ${site_root_new[j]} ]];then
      unset site_root_new[i]  
    fi
  done
done
#rd=$RANDOM
echo "自動備份,共${#site_root_new[*]}個站點"
echo "開始備份..."
back_dir=${back_dir%%/}"/"`date +%Y%m%d`"/"
if [ ! -e $back_dir ];then
        mkdir -p $back_dir
fi
for root in ${site_root_new[@]}
do
        name=`basename $root`
        back_file=$back_dir$name"-"$back_file_name".tar.gz"
        echo "正在備份: $root >> $back_file"    
        if [[ -n $is_back && $is_back == 1 ]];then
                tar -czPf $back_file --exclude=.svn --exclude=.git $root/
        fi
done
#保留多少天的數據
find $back_dir -mtime +$day -name "*.tar.gz" -exec rm -rf {} \;
echo "備份結束"

代碼來源於 時光博客laravel

相關文章
相關標籤/搜索