• shell 实现自动备份nginx下的站点


    shell 实现自动备份nginx下的站点

    优点

    • 实现自动备份ngnix下的所有运行的站点
    • 自定义排除备份站点,支持三种排除
    • 自动维护备份目录,防止备份目录无限扩大
    • 备份压缩tar.gz格式

       源码: 

       

    #!/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 "备份结束"

    代码来源于 时光博客

  • 相关阅读:
    谈谈我对雾霾的看法
    2016年书单分享
    我的面试心得:面试官视角
    Cesium原理篇:GroundPrimitive
    Cesium原理篇:Batch
    Peter Hessler和他的中国三部曲(上)
    Cesium原理篇:Material
    全球PM25实时可视化
    Cesium原理篇:Property
    次郎的寿司梦
  • 原文地址:https://www.cnblogs.com/300js/p/9138659.html
Copyright © 2020-2023  润新知