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

优点

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

源码:

  1. #!/bin/bash
  2. #########################
  3. # 功能:实现自动备份nginx下的站点
  4. # 版本:v1.
  5. # 时间://
  6. # 作者:百里
  7. # 最后修改时间://
  8. ########################
  9. set +x
  10. ######################################自定义参数###################################
  11. #定义备份的目录,无需/结尾
  12. back_dir=/data/back/site_root
  13. #定义站点目录,无需/结尾
  14. vhost_dir=/usr/local/nginx/conf/vhost
  15. #定义文件名格式
  16. back_file_name=`date +%Y%m%d`
  17. #是否开启备份,默认不备份,只显示,传1则备份
  18. is_back=$
  19. #定义排除站点,必须是.conf结尾的后缀
  20. exclude_site=("admin-laravel.sgfoot.com.conf" "car.cc.conf" "sync.conf" "jap.cc.conf" "wxadmin.sgfoot.com.conf")
  21. #定义nginx配置文件含某关键字的不备份
  22. exclude_keyword=("test" "asset")
  23. #定义root站点目录含某关键字的不备份
  24. exclude_root_keyword=("test" "sgfoot")
  25. #设置保存多少天
  26. day=
  27. ######################################业务逻辑#####################################
  28. #定义站点数组
  29. site_list=()
  30. #获取所有正在运行的站点名称
  31. i=
  32. for file_name in $vhost_dir/*
  33. do
  34. name=`basename $file_name`
  35. ext="${name##*.}" #提取后缀
  36. if [[ $ext == "conf" && ${exclude_site[@]} != *$name* ]] #排除非conf文件名
  37. then
  38. site_list[$i]=$name
  39. let "i++"
  40. fi
  41. done
  42. #排除含某关键字的站点
  43. i=0
  44. for file_name in ${site_list[@]}
  45. do
  46. for key in ${exclude_keyword[@]}
  47. do
  48. if [[ $file_name == *$key* ]];then
  49. unset site_list[$i]
  50. fi
  51. done
  52. let "i++"
  53. done
  54. #分析提取站点目录
  55. site_root_list=()
  56. i=0
  57. for file_name in ${site_list[@]}
  58. do
  59. file=$vhost_dir"/"$file_name
  60. if [ -f $file ];then
  61. root=$(cat $file |grep "root"|awk '{print $2}')
  62. root=${root%%;*}
  63. if [ -e $root ];then
  64. site_root_list[$i]=$root
  65. let "i++"
  66. fi
  67. fi
  68. done
  69. #排除root站点含某关键字不备份
  70. i=0
  71. site_root_new=()
  72. for file in ${site_root_list[@]}
  73. do
  74. flag=0
  75. for key in ${exclude_root_keyword[@]}
  76. do
  77. if [[ "$file" == *$key* ]];then
  78. flag=1
  79. break
  80. fi
  81. done
  82. if [ $flag -eq 0 ];then
  83. file=${file%%public*} #解决laravel项目特殊情况
  84. file=${file%%/} #去掉路径后的/
  85. site_root_new[$i]=$file
  86. let "i++"
  87. fi
  88. done
  89. #去重
  90. len=${#site_root_new[@]}
  91. for((i=0;i<$len;i++))
  92. do
  93. for((j=$len-1;j>i;j--))
  94. do
  95. if [[ ${site_root_new[i]} = ${site_root_new[j]} ]];then
  96. unset site_root_new[i]
  97. fi
  98. done
  99. done
  100. #rd=$RANDOM
  101. echo "自动备份,共${#site_root_new[*]}个站点"
  102. echo "开始备份..."
  103. back_dir=${back_dir%%/}"/"`date +%Y%m%d`"/"
  104. if [ ! -e $back_dir ];then
  105. mkdir -p $back_dir
  106. fi
  107. for root in ${site_root_new[@]}
  108. do
  109. name=`basename $root`
  110. back_file=$back_dir$name"-"$back_file_name".tar.gz"
  111. echo "正在备份: $root >> $back_file"
  112. if [[ -n $is_back && $is_back == 1 ]];then
  113. tar -czPf $back_file --exclude=.svn --exclude=.git $root/
  114. fi
  115. done
  116. #保留多少天的数据
  117. find $back_dir -mtime +$day -name "*.tar.gz" -exec rm -rf {} \;
  118. 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. leetcode 【 Reverse Nodes in k-Group 】 python 实现

    原题: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list ...

  2. 如何部署安装软件:vs2010 'VS' Inno Setup

    一直以来就是调试程序,生成的文件在debug或者release下,当没有其他资源文件时,这些程序也不用打包,直接就能够运行,但是程序中总会有一些额外的资源文件,视频啊,图片啊.这些需要打包在一个安装文 ...

  3. Android坐标getLeft,getRight,getTop,getBottom,getLocationInWindow和getLocationOnScreen

    Android中获取坐标点的一些方法解释 一.getLocationInWindow和getLocationOnScreen的区别 // location [0]--->x坐标,location ...

  4. [oldboy-django][2深入django]老师管理 -- form表单如何生成多选框标签,多选框的默认值显示,以及多选框数据插入到数据库,多选框数据更改到数据库

    1 form表单如何生成多选框(包含了多选框可选择内容) - Form设置班级输入框为 select多选 - 多选 class TeacherForm(Form): name = fields.Cha ...

  5. [python][django学习篇][3]创建django web的数据库模型

    推荐学习博客:http://pythonzh.cn/post/8/ 博客或者web界面向用户展示内容,它需要从某个地方获取博客内容或者web界面内容,才能够展示出来.通常来说:某个地方指的就是数据库 ...

  6. Solr安装 win系统

    安装之前需查看:https://lucene.apache.org/solr/guide/7_6/solr-system-requirements.html#solr-system-requireme ...

  7. 初学Linux 命令

    查看ip:ifconfig 切换用户:us root(root为用户名) 显示当前目录:pwd 列出当前目录下所有文件:ls 进入某个目录 :cd 创建一个文件夹:mkdir 创建多个目录(当没有该父 ...

  8. linux下编译lua库

    编辑MakeFile INSTALL_TOP= /usr/local修改为目标install位置 执行 make linux make install 如果提示依赖libreadline  可以直接a ...

  9. Ionic2 调用自定义插件之研究

    cordova机制我在此就不提了,我们使用Typescript调用cordova plugin就如同调用第三方库是一个道理,那么这里就少不了书写declare文件,下面我就把几种封装调用的几种方式介绍 ...

  10. wordpress install 主题

    手动安装,你可到访WordPress官方网站的主题部分,找到你喜欢的主题后,可压缩下载到电脑并将其解压缩: 上传.zip 包到服务器,解压到 wordpress/wp-content/themes c ...