前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS中将备份文件同步到BitBucket、GitHub和Coding的shell脚本

CentOS中将备份文件同步到BitBucket、GitHub和Coding的shell脚本

作者头像
typecodes
发布2024-03-29 13:42:30
1170
发布2024-03-29 13:42:30
举报
文章被收录于专栏:typecodes

上一篇文章讲述了如何在Linux系统中配置BitBucket、GitHub和Coding这三个平台的git账户,这篇文章就分享如何通过shell脚本定时获取自己的CentOS7.1服务器上的备份文件,然后使用git命令同步到这三个平台仓库上。

CentOS中git同步的shell脚本
CentOS中git同步的shell脚本
1 功能需求描述

我自己为这个shell同步脚本设定了以下三个需求功能点:

代码语言:javascript
复制
1、自动获取数据库备份目和程序备份目录下自动生成的最新的备份文件;
2、将获取到的最新的备份数据库和程序文件自动同步到BitBucket、GitHub和Coding这三个Git平台;
3、生成相应的执行日志文件。
2 shell脚本的思路和流程

根据上面的需求,整理出脚本思路:先获取最新的备份文件,然后复制到本地的BitBucket、GitHub和Coding仓库目录下,然后通过Git命令同步到远端仓库即可,整个过程执行的命令以追加的方式保存到同一个日志文件中。

脚本的主要流程:

代码语言:javascript
复制
1、先声明变量`Source_DB_Dir`、`Source_PRG_Dir`表示自己的CentOS服务器上的数据库和程序备份目录,然后`Git_Err_Log_Dir`是生成的执行日志目录。

2、接着声明BitBucket、GitHub和Coding这3个Git平台的本地仓库所在目录(主要是数据库DB目录和程序PRG目录);

3、后面的三个函数`ERROR`、`NOTICE`和`RUNCMD`对应着不同的操作命令级别并生成相应的日志文件;

4、函数`Get_last_file`功能是获取该目录下面最新的文件;

5、`Git_Commit`函数主要会先通过`git pull`获取远端仓库的最新内容到本地仓库,然后再将本地仓库更新的备份文件同步到远端仓库中。
3 完整的脚本内容

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

#!/bin/bash # TypeCodes Git Synchronous Script v1.0.0 # (c) 2015 vfhky https://typecodes.com/linux/gitsynbackupshell.html Source_DB_Dir=/mydata/backups/data/mysql Source_PRG_Dir=/mydata/backups/data/typecodes Git_Err_Log_Dir=/mydata/backups/logs/git # Coding.net CodingNet_DB_Dir=/mydata/GitBang/CodingNet/myblog/db CodingNet_PRG_Dir=/mydata/GitBang/CodingNet/myblog/program # BitBucket.org BitBucket_Dir=/mydata/GitBang/BitBucket/myblog/db BitBucket_PRG_Dir=/mydata/GitBang/BitBucket/myblog/program # GitHub.com GitHub_Dir=/mydata/GitBang/GitHub/myblog/db GitHub_PRG_Dir=/mydata/GitBang/GitHub/myblog/program # Get the newest file name #Newest_File="ls -lrt| tail -n 1 | awk '{print $9}'" # Space separated list of databases PRGNAME="Git_Synchronous" # Current date format: e.g 20150505_2015 Current_Date=date +%Y%m%d\_%H%M function USAGE() { cat << EOF usage: $0 options This script synchronize the backup files to BitBucket, GitHub and Coding. OPTIONS: -h Show this message -n Number of days to keep backups EOF } while getopts "hal:n:" opt; do case $opt in a) PRGNAME="" ;; h) USAGE exit 1 ;; l) PRGNAME="$OPTARG" ;; n) NUMDAYS=$OPTARG ;; \?) USAGE exit ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done function ERROR() { echo && echo "error $@" >> $Git_Err_Log_Dir/Git_$Current_Date.log exit 1 } function NOTICE() { echo && echo "notice $@" >> $Git_Err_Log_Dir/Git_$Current_Date.log } function RUNCMD() { echo $@ >> $Git_Err_Log_Dir/Git_$Current_Date.log eval $@ } # Git commit command function function Git_Commit(){ if $# -ne 0 -a $# -ne 1 ; then ERROR "Usage: Git_Commit or Git_Commit file_path!" exit 1; elif $# -lt 1 ; then RUNCMD git pull && git add --all && git commit -m "Backup from TypeCodes.com Time:$Current_Date" && git push origin master else RUNCMD git pull && git add $1 && git commit -m "Backup from TypeCodes.com Time:$Current_Date" && git push origin master fi } # $1:path $2:filter file-type function Get_last_file(){ if $# -ne 1 -a $# -ne 2 ; then ERROR "Usage: Get_last_file file_path or Get_last_file file_path file_type!" exit 1; elif $# -lt 2 ; then ls -lrt $1 | tail -n 1 | awk '{print $9}' else ls -lrt $1 | awk "/$2/" | tail -n 1 | awk '{print $9}' fi } if ! -d $Git_Err_Log_Dir ; then mkdir -p $Git_Err_Log_Dir fi NOTICE "Start copy the db_file to git index" RC=0 Last_Source_DB_File=$(Get_last_file $Source_DB_Dir) RUNCMD "cd $Source_DB_Dir && \cp -rf $Last_Source_DB_File $CodingNet_DB_Dir && \cp -rf $Last_Source_DB_File $BitBucket_Dir && \cp -rf $Last_Source_DB_File $GitHub_Dir" RC=$? if $RC -gt 0 ; then ERROR "Copy db_file failed!" fi NOTICE "Start copy the program_file to git index" Last_Program_DB_File=$(Get_last_file $Source_PRG_Dir) RUNCMD "cd $Source_PRG_Dir && \cp -rf $Last_Program_DB_File $CodingNet_PRG_Dir && \cp -rf $Last_Program_DB_File $BitBucket_PRG_Dir && \cp -rf $Last_Program_DB_File $GitHub_PRG_Dir" RC=$? if $RC -gt 0 ; then ERROR "Copy program_file failed!" fi NOTICE "Start push to CodingNet" RUNCMD "cd $CodingNet_PRG_Dir && tar -zxf $(Get_last_file $CodingNet_PRG_Dir .tar.gz) && cd ../ && Git_Commit" NOTICE "Start push to BitBucket" RUNCMD "cd $BitBucket_PRG_Dir && tar -zxf $(Get_last_file $BitBucket_PRG_Dir .tar.gz) && cd ../ && Git_Commit" NOTICE "Start push to GitHub" RUNCMD "cd $GitHub_PRG_Dir && tar -zxf $(Get_last_file $GitHub_PRG_Dir .tar.gz) && cd ../ && Git_Commit" # exit 0

4 单独执行该shell脚本

可以将这个脚本保存为git.sh,然后使用时通过chmod +x git.sh命令添加执行权限,最后通过./git.sh执行该脚本即可。附图如下:

同步到BitBucket仓库时的截图:

同步到BitBucket仓库时
同步到BitBucket仓库时

同步到GitHub仓库时的截图:

同步到GitHub仓库时
同步到GitHub仓库时
5 定时执行该shell脚本

利用Linux系统的crontab定时任务工具执行该脚本,例如下面这个配置就是每天凌晨1点的时候执行该shell脚本。

代码语言:javascript
复制
[root@typecodes bak_list]# crontab -e
0 1 * * * /mydata/backups/bak_list/git.sh

根据脚本中的配置,生成的日志类似于/mydata/backups/logs/git/Git_20150706_0100.log

git同步的shell脚本执行生成的日志
git同步的shell脚本执行生成的日志
本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 功能需求描述
  • 2 shell脚本的思路和流程
  • 3 完整的脚本内容
  • 4 单独执行该shell脚本
  • 5 定时执行该shell脚本
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com