gitlab异地备份并验证MD5值

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

需求

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

实现思路

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

#!/bin/bash
gitlab_dir="/data/backups/gitlab"
file_name=`ls -tr $gitlab_dir|tail -n 1`     #get lastest gitlab file
port="22"
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 [ $# != 2 ] ; then
    echo "需要2个参数,一个是邮件内容,一个是邮件主题"
    exit 1;
  fi
   echo "$1" |mail -s "$2" 528634141@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=0
   else
      FLAG=1
      exit 1
   fi
}

function rsync_file(){
    rsync -av  --progress --bwlimit=1500 -e "ssh -p$port" $gitlab_dir/$file_name $IP:$backup_dir
    if [ $? -eq 0 ];then
      md5sum_file
      if [ $FLAG == 0 ];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 1
    fi
}

rsync_file

优化的地方

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

原文地址:https://www.cnblogs.com/uglyliu/p/11055610.html

时间: 2024-10-05 05:04:50

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

linux shell 命令获取字符串/文件的MD5值

获取字符串的MD5值: 字符串"hello"的MD5: $ echo -n 'hello'|md5sum|cut -d ' ' -f1 得到的MD5值: 5d41402abc4b2a76b9719d911017c592 命令解释: md5sum: 显示或检查 MD5(128-bit) 校验和,若没有文件选项,或者文件处为"-",则从标准输入读取. echo -n : 不打印换行符. cut:  cut用来从标准输入或文本文件中剪切列或域.剪切文本可以将之粘贴到一个文

MD5值算法原理

MD5原理说明 一.MD5算法介绍. MD5,即“Message-Digest Algorithm 5(信息-摘要算法)”,从名字来看就知道它是从MD3.MD4发展而来的一种加密算法,其主要通过采集文件的信息摘要,以此进行计算并加密.通过MD5算法进行加密,文件就可以获得一个唯一的MD5值,这个值是独一无二的,就像我们的指纹一样,因此我们就可以通过文件的MD5值来确定文件是否正确,密码进行加密后也会生成MD5值,论坛就是通过MD5值来验证用户的密码是否正确的. 二.MD5算法实现. MD5是输入

MD5各种长度加密字符、验证MD5等操作辅助类 MD5Util

实现效果  1)本辅助类主要是用来方便实现MD5各种长度加密字符.验证MD5等操作. 2)MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算机广泛使用的散列算法之一(又译摘要算法.哈希算法). 3)MD5已经广泛使用在为文件传输提供一定的可靠性方面.例如,服务器预先提供一个MD5校验和,用户下载完文件以后,用MD5算法计算下载文件的MD5校验和,然后通过检查这两个校验和是否一致,就能判断下载的文件是否出错 实现代码  1)辅助类提

C# 计算文件的MD5值

/// <summary> /// 计算文件的MD5校验 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static string GetMd5HashFromFile(string fileName) { try { FileStream file = new FileStream(fileNam

python计算文件的md5值

前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当把一个文件从pc端复制到优盘时出现了一个问题,复制到优盘的文件比pc端的文件慢了两秒钟! 这里我用的复制函数是 shutil.copy2(),理论上它会把修改时间和最后访问时间也复制过来1,但是实际情况并不是完全相同. 详细情况我在segmentfault里提出了问题:为什么将一个文件从pc中复制到

linux下md5sum用法 (查看文件或字符串的md5值)

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的"指纹"(或称"报文摘要"),不同的文件产生相同的报文摘要的可能性是非常非常之小的. md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和.一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行

Gitlab数据备份及数据恢复重置gitlab管理密码方法

一.创建备份文件首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份. gitlab完全备份命令: gitlab-rake gitlab:backup:create 使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1545200330_2018_12_19_11.3.13_gitlab_backup.tar的压缩包, 这个压缩包就是Gi

快速遍历对比两个文件下的md5值

[[email protected] Activity]# find /opt/xyrpg/rpgserver_s1/XMLData/Activity/ -type f -exec md5sum {} \;|sed 's/rpgserver_s1/rpgserver_s2/'|md5sum -c /opt/xyrpg/rpgserver_s2/XMLData/Activity/ActivityCondition.xml: FAILED /opt/xyrpg/rpgserver_s2/XMLDat

Python计算一个目录下的所有文件的md5值,在Linux系统下面

实现代码如下: #!/usr/bin/python #*-*coding:utf8*-* import os import sys import hashlib def md5sum(data):     with open(data, "rb") as f:         md5 = hashlib.md5()     #赋空值         for i in f.read(4096):    #防止遇到大文件打开太占用内存,所以一次打开4096字节             if