当前位置: 首页 > news >正文

[Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...

背景:

凡事使用服务器搭建的网站就需要定时备份网站数据,常见的方法是打包网站目录,然后备份到FTP服务器上等。也有通过OSS SDK把备份的网站文件上传到OSS服务器上,但是通过SDK来实现,需要一定的技术能力,而且相对比较复杂,需要使用更多的文件,而这篇文章是通过shell脚本,并不是通过OSS SDK来上传文件,简单方便。

步骤:

1、首先需要在阿里云注册账号,开通OSS服务,创建bucket,Bucket设置为私有读写。

2、将下面的脚本文件复制下来,保存为 .sh 脚本文件(例如:backupsites,放置在/usr/local/sbin/backupsites),其中需要把oss地址、bucket名字、Access ID、Access Key、网站目录,已经通知邮件的地址修改成自己的。

3、使用命令: chmod +x /usr/local/sbin/backupsites 对文件设置执行权限。

4、使用命令: echo “0 0 * * * /usr/local/sbin/backupsites” >>/var/spool/cron/root

设置每天零点进行备份网站数据。

脚本:

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

Date=`date +%Y-%m-%d_%H:%M:%S`
BucketTime=`date +%Y%m`
OldDate=$(date -d "-7 days" "+%Y-%m-%d")

Host="oss-cn-hangzhou-internal.aliyuncs.com"
###oss的地址###
Bucket="bucketname"
###bucket名字###
Id="xxxxxxxx"
###Access ID###
Key="xxxxxxxxxx"
###Access Key###
OssHost=$Bucket.$Host

#========================BackUp Web========================
WebSite=(
    '/www/wwwroot/xxx.com/www'
    '/www/wwwroot/xxx.com/blog'
  )
###这里是填写需要备份网站的目录信息,这里设置了五级的目录###

for WebDomains in ${WebSite[@]}; do
    WebDomainsA=`echo "$WebDomains" | awk -F "/" '{print $5}'`
    WebDomainsB=`echo "$WebDomains" | awk -F "/" '{print $4}'`
###这段是为了取值网站目录的信息###
    zip -P 密码 /tmp/WebSites.$WebDomainsA.$WebDomainsB.$Date.zip $WebDomains -r
###这里设置了zip压缩密码,备份的名称是自定义###

    if [ -s /tmp/WebSites.$WebDomainsA.$WebDomainsB.$Date.zip ] ; then

        source="/tmp/WebSites.$WebDomainsA.$WebDomainsB.$Date.zip"
        dest="$BucketTime/WebSites.$WebDomainsA.$WebDomainsB.$Date.zip"
        
        resource="/${Bucket}/${dest}"
        contentType=`file -ib ${source} |awk -F ";" '{print $1}'`
        dateValue="`TZ=GMT env LANG=en_US.UTF-8 date +'%a, %d %b %Y %H:%M:%S GMT'`"
        stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
        signature=`echo -en $stringToSign | openssl sha1 -hmac ${Key} -binary | base64`

        url=http://${OssHost}/${dest}
        echo "upload ${source} to ${url}"

        curl -i -q -X PUT -T "${source}" \
            -H "Host: ${OssHost}" \
            -H "Date: ${dateValue}" \
            -H "Content-Type: ${contentType}" \
            -H "Authorization: OSS ${Id}:${signature}" \
            ${url}

        if [ $? -ne 0 ];then
            echo -e ""[$HOSTNAME] WebSites $WebDomainsA.$WebDomainsB $Date Fail Upload "" | mutt -s "'[$HOSTNAME] WebSites $WebDomainsA.$WebDomainsB $Date Fail Upload'" daobidao@daobidao.com
        else
            echo -e ""[$HOSTNAME] WebSites $WebDomainsA.$WebDomainsB $Date Success"" | mutt -s "'[$HOSTNAME] WebSites $WebDomainsA.$WebDomainsB $Date Success'" daobidao@daobidao.com
            rm -rf /tmp/WebSites.$WebDomainsA.$WebDomainsB.$OldDate*
        fi

    else

        echo -e ""[$HOSTNAME] WebSites $WebDomainsA.$WebDomainsB $Date Fail Backup "" | mutt -s "'[$HOSTNAME] WebSites $WebDomainsA.$WebDomainsB $Date Fail Backup'" daobidao@daobidao.com

    fi
done
#========================BackUp Web========================

执行效果可以查看:

http://blog.daobidao.com/shell-backup-webs-to-oss.html

相关文章:

  • Spring Boot源码分析-配置文件加载
  • Linux下cpu过高问题排查
  • 业务层设计
  • final Map可以修改内容,final 常量不能修改
  • npm安装包时 --save 和 --save-dev 的区别
  • 05-数据仓库之建模实例
  • 2018-2019 20165239 Exip MSF基础应用
  • Netty源码分析(五):EventLoop
  • 是时候放弃tensorflow集群投入horovod的怀抱
  • OO第二阶段作业总结
  • MUI 返回顶部
  • 知识点---js监听手机返回键,回到指定界面
  • 无论你是什么职业,这篇职场生存法则都是你必备的
  • 余莹是谁?
  • 37.C#--面对对象_类的基本使用
  • [LeetCode] Wiggle Sort
  • 【知识碎片】第三方登录弹窗效果
  • 2017届校招提前批面试回顾
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • docker容器内的网络抓包
  • ES6 学习笔记(一)let,const和解构赋值
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • leetcode讲解--894. All Possible Full Binary Trees
  • Map集合、散列表、红黑树介绍
  • maven工程打包jar以及java jar命令的classpath使用
  • MYSQL 的 IF 函数
  • oldjun 检测网站的经验
  • Spring核心 Bean的高级装配
  • vagrant 添加本地 box 安装 laravel homestead
  • 从0实现一个tiny react(三)生命周期
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 简析gRPC client 连接管理
  • 译米田引理
  • 应用生命周期终极 DevOps 工具包
  • Java性能优化之JVM GC(垃圾回收机制)
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • Prometheus VS InfluxDB
  • ​io --- 处理流的核心工具​
  • ​卜东波研究员:高观点下的少儿计算思维
  • !!java web学习笔记(一到五)
  • #{}和${}的区别?
  • $.ajax,axios,fetch三种ajax请求的区别
  • $NOIp2018$劝退记
  • (30)数组元素和与数字和的绝对差
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二十三)Flask之高频面试点
  • (转)Unity3DUnity3D在android下调试
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • @Bean注解详解
  • @Validated和@Valid校验参数区别
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [BZOJ4566][HAOI2016]找相同字符(SAM)