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

优点

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

源码:

#!/bin/bash
#########################
# 功能:实现自动备份nginx下的站点
# 版本:v1.
# 时间://
# 作者:百里
# 最后修改时间://
########################
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=$
#定义排除站点,必须是.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=
######################################业务逻辑#####################################
#定义站点数组
site_list=()
#获取所有正在运行的站点名称
i=
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 "备份结束"

代码来源于时光博客

shell 实现自动备份nginx下的站点的更多相关文章

  1. linux中使用corntab和shell脚本自动备份nginx日志,按天备份

    编写shell脚本,实现nginx日志每天自动备份到指定文件夹! 需要的命令mv , corntab -e(定时任务),shell脚本 这里先说一下corntab: https://www.cnblo ...

  2. Linux下使用shell脚本自动备份和移动数据到大容量存储

    自动备份数据库,并将备份前一天的数据移动拷贝到存储上. 需求来源是因为linux系统层的磁盘存储容量过小,数据库自动备份之后日积月累数据越来越多,而且还不想删除旧数据.那解决方法就是在linux系统主 ...

  3. SHELL脚本自动备份Linux系统

    今天来写一个使用shell脚本增量备份系统文件,顺便复习一下shell脚本相关的命令,这个脚本可以根据自己的需求来备份不同的文件或者文件夹,进行完整备份和增量备份.直接上脚本如下: #!/bin/sh ...

  4. shell实现自动备份整个数据库,一个库备份一个文件

    自动实现备份整个数据库 实现一个库备份一个文件 实现排除不需要备份的库 实现备份成压缩文件 实现定义保留多少天的备份文件 核心代码 #!/bin/bash #set -x ############## ...

  5. shell脚本自动备份MySQL数据库

    脚本如下: #!/bin/bash #数据库IP dbserver='127.0.0.1' #数据库用户名 dbuser='root' #数据密码 dbpasswd=' #数据库,如有多个库用空格分开 ...

  6. 使用shell定时自动备份mysql数据库

    #!/bin/bash id="root" #用户名 pwd="123456" #密码 dbs="blog.ewsd.cn dangjian.ewsd ...

  7. shell监控自动备份是否成功(判断文件是否存在)

    作者:邓聪聪 在自动打包生成备份sql文件后,对运行情况做一个监控!  命令前加time,查看命令执行完成所用时间! FILE_DIR=/root/ DATE=$(date +%F) FILE_NAM ...

  8. SHELL脚本自动备份数据库

    #!/bin/bash db_user="root" db_passwd="dddddd " db_name="mmmmmm" cd /db ...

  9. 在linnux下,配置自动备份oacle

    以oracle身份登录到linux,在oracle home目录下创建目录 shell $ mkdir shell 创建自动备份脚本 $ cd shell $ touch expdp.sh $ chm ...

随机推荐

  1. border,border-width不支持百分比

    1.border-width不支持百分比 原因:不会因为设备大就按比例变大 同样的,outline,box-shadow,text-shadow也不支持百分比 也就是border不支持百分比 2.bo ...

  2. loj2090 「ZJOI2016」旅行者

    分治+最短路,很套路的 #include <algorithm> #include <iostream> #include <cstring> #include & ...

  3. 分分钟教你做出自己的新闻阅读APP

    分分钟教你做出自己的新闻阅读APP 引子 曾经不小心发现了一些好的看新闻的网站,但是电脑又不是随身携带,因此想要下载一个这个网站的手机APP来看新闻,但是问题来了,这个网站根本没有做Android端! ...

  4. python2.X中文乱码

    在IDE下,加上# -- coding: UTF-8 -- 并且保证IDE也是utf-8编码. 在CMD下,这样执行会有乱码,为啥呢,因为cmd下是gbk编码的,你写的代码必须也是gbk编码的,你可以 ...

  5. Robotium测试报告的生成方法(下)

    7.4 测试报告优化 通过上面的三种方法,我们都可以得到一个Xml格式的测试报告,不过这不是我们想要的,因为这样的报告读起来很费劲,而且这样的报告发给领导们也是不行的.所以我们要美化一下才行,一般都是 ...

  6. Atom-无懈可击的Markdown编辑器

    备战美赛期间,向岳神学习,搞了Atom玩协作开发,第一次没有自动补全的手撸了遗传算法.今天发现Atom还有写Markdown的妙用,遂拿来练手. 1. 安装Atom 下载安装Atom:https:// ...

  7. 计算几何-凸包-toleft test

    toLeftTest toLeftTest是判断一个点是否在有向直线左侧的算法. 当点s位于向量pq左侧时,toLeftTest返回true.当点s位于向量pq右侧时,toLeftTest返回fals ...

  8. redhat-2

    2016年5月16日-工作日志1 通过PXE安装RHEL7.2系统,部署satellite6.2(采用不是least-stable版本,是Satellite-6.2.0-RHEL-7-20160512 ...

  9. 【转】利用Behavior Designer制作敌人AI

    http://www.unity.5helpyou.com/3112.html 本篇unity3d教程,我们来学习下利用Behavior Designer行为树插件来制作敌人AI,下面开始! Beha ...

  10. 【转】Apache Thrift - 可伸缩的跨语言服务开发框架

    Apache Thrift - 可伸缩的跨语言服务开发框架 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详 ...