找回密码
 立即注册
查看: 279|回复: 0

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

[复制链接]

12

主题

4

回帖

77

积分

管理员

积分
77
发表于 2023-7-3 20:49:57 | 显示全部楼层 |阅读模式
背景:
凡事使用服务器搭建的网站就需要定时备份网站数据,常见的方法是打包网站目录,然后备份到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
设置每天零点进行备份网站数据。
脚本:
  1. #!/bin/bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH

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

  7. Host="oss-cn-hangzhou-internal.aliyuncs.com"
  8. ###oss的地址###
  9. Bucket="bucketname"
  10. ###bucket名字###
  11. Id="xxxxxxxx"
  12. ###Access ID###
  13. Key="xxxxxxxxxx"
  14. ###Access Key###
  15. OssHost=$Bucket.$Host

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

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

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

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

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

  39.         curl -i -q -X PUT -T "${source}" \
  40.             -H "Host: ${OssHost}" \
  41.             -H "Date: ${dateValue}" \
  42.             -H "Content-Type: ${contentType}" \
  43.             -H "Authorization: OSS ${Id}:${signature}" \
  44.             ${url}

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

  51.     else

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

  53.     fi
  54. done
  55. #========================BackUp Web========================
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|至尊完美

GMT+8, 2024-5-14 06:06 , Processed in 1.007572 second(s), 35 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表