最近公司发生了蛮多事情的,唉,咱也不管问啊,好好干活吧

需求

把gitlab的备份文件异地备份一份,备份无论失败还是成功通知某邮箱

实现思路

先rsync文件过去,判断rsync这个步骤有没有成功,失败了直接发送备份失败的邮件,成功了的话,再判断源文件和备份的文件的md5值,相等发送备份成功,不相等,发送备份失败

#!/bin/bash
gitlab_dir="/data/backups/gitlab"
file_name=`ls -tr $gitlab_dir|tail -n ` #get lastest gitlab file
port=""
IP="192.168.129.212"
backup_dir="/data/gitlab-backup-from-172.17.3.41"
starttime=`date +'%Y-%m-%d %H:%M:%S'` function send_mail(){
if [ $# != ] ; then
echo "需要2个参数,一个是邮件内容,一个是邮件主题"
exit ;
fi
echo "$1" |mail -s "$2" @qq.com
} function md5sum_file(){ source_file_name_md5sum_value=`md5sum $gitlab_dir/$file_name|awk '{print $1}'`
echo "$file_name" >/tmp/md5sum.txt
scp /tmp/md5sum.txt $IP:/tmp
back_file_name_md5sum_value=`ssh $IP 'sh /usr/local/shells/md5sum.sh'`
echo $back_file_name_md5sum_value
if [ $source_file_name_md5sum_value == $back_file_name_md5sum_value ];then
FLAG=
else
FLAG=
exit
fi
} function rsync_file(){
rsync -av --progress --bwlimit= -e "ssh -p$port" $gitlab_dir/$file_name $IP:$backup_dir
if [ $? -eq ];then
md5sum_file
if [ $FLAG == ];then endtime=`date +'%Y-%m-%d %H:%M:%S'`
send_mail "研发源gitlab(172.17.3.41)-文件$file_name备份至世纪互联服务器$IP成功,md5值为:$back_file_name_md5sum_value,请确认! 开始时间:$starttime, 结束时间:$endtime" "Gitlab备份成功!"
else
send_mail "研发源gitlab(172.17.3.41)-文件验证md5值失败,$file_name备份失败,请确认!" "Gitlab备份失败!"
fi
else
send_mail "rsync $file_name失败" "rsync $file_name失败"
exit
fi
} rsync_file

优化的地方

  • 发送邮件的函数太粗糙了
  • 没有判断源gitlab是否备份成功了
  • 取最新的文件也很粗糙

gitlab异地备份并验证MD5值的更多相关文章

  1. mysql数据库binlog日志的异地备份

    MySQL数据库的二进制日志binlog记录了对数据库的全量DDL和DML操作,对数据库的point to point灾难恢复起着无法替代的关键作用.因此,基于此类考虑,需要对生产环境产生的binlo ...

  2. md5sum 计算和校验文件的md5值

    1. 命令功能 md5算法一般用于检查文件完整性, 2. 语法格式 md5sum  [option]  [file] 参数 参数说明 -b 以二进制模式读入文件 -t 以文本模式读入文件 -c 用来从 ...

  3. 下载文件的一致性验证之MD5值校验

    前几天写脚本遇到下载功能校验,一时间不到怎么校验好? 于是请教大神,大神给出方案如下:  先去了解一下你们的产品针对这个下载功能有没有做什么功能设计...然后再针对这些功能设计去设计测试用例...比如 ...

  4. md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样

    md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样

  5. python计算文件的md5值

    前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...

  6. asp.net和js读取文件的MD5值的方法

    前言 文件的md5值,即文件签名,为了验证文件的正确性,是否被恶意篡改等.每个文件有一个唯一的md5值. 最近公司开发的app文件包的校验就有用到文件md5值. 一.asp.net获取 ①和上传文件一 ...

  7. C#计算文件的MD5值实例

    C#计算文件的MD5值实例 MD5 是 Message Digest Algorithm 5(信息摘要算法)的缩写,MD5 一种散列(Hash)技术,广泛用于加密.解密.数据签名和数据完整性校验等方面 ...

  8. MD5值算法原理

    MD5原理说明 一.MD5算法介绍. MD5,即“Message-Digest Algorithm 5(信息-摘要算法)”,从名字来看就知道它是从MD3.MD4发展而来的一种加密算法,其主要通过采集文 ...

  9. md5值计算

    1.md5(Message Digest 5th/消息概要加密算法 第5版) REFER: MD5 On wikipedia 2.应用范围 ① 验证下载文件的完整性 ② 3.关于MD5的几个问题 ①只 ...

随机推荐

  1. 剑指offer:整数中1出现的次数

    题目描述: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了 ...

  2. Devops(三):Docker常用命令

    列出镜像列表(docker images) [root@master docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello ...

  3. css3实现左侧固宽,右侧随着屏幕,右侧随着屏幕变化而变化

    A, ----float+calc(css3新属性计算属性)方式 <div class="Father"> <div class="LeftChildr ...

  4. 第2课第7节_Java面向对象编程_内部类_P【学习笔记】

    摘要:韦东山android视频学习笔记  1.什么是内部类:在类的内部定义一个类,内部类可以访问类的私有属性 class Outer{ ; class Inner{ public void print ...

  5. 《你必须知道的javascript(上)》- 1.作用域和闭包

    1 作用域是什么 1.1 编译原理 分词/词法分析(Tokenizing/Lexing) 将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为词法单元(token). 解析/语 ...

  6. Node.js 实现第一个应用以及HTTP模块和URL模块应用

    /* 实现一个应用,同时还实现了整个 HTTP 服务器. * */ //1.引入http模块 var http=require('http'); //2.用http模块创建服务 /* req获取url ...

  7. Linux目录结构和作用

    转载自:https://blog.csdn.net/wangrongrongwq/article/details/79624797 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat ...

  8. TensorFlow-线程回归模型

    实验目的: 方程:y = Wx + b 通过大量的(x, y)坐标值,模型可以计算出接近W和b的值 实验步骤: 第一步:生成线程回归方程模型所需要的数据 import numpy as np impo ...

  9. 【翻译】Flink Table Api & SQL —— 概念与通用API

    本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/common.html Flink Tabl ...

  10. NOI2019 Fe

    NFLS XY NOI2019 Fe Orz zsy,zhf,wqy,zjc,bly! Goodbye OI!