zoukankan      html  css  js  c++  java
  • gitlab备份脚本

    1.备份需求

      1.gitlab服务器每天凌晨1点在gitlab服务器本地打包备份(gitlab的nginx配置,主配置和gitlab自带备份文件,这也是gitlab所需要备份的)
      2.gitlab服务器备份的数据必须存放至以主机名ip地址当前时间命名的目录中
      3.gitlab服务器最后通过rsync推送本地已经打包好的备份文件至backup服务器,并就传输结果进行判断,如果传输失败,发送邮件通知,否则不发。
      4.gitlab服务器本地保留最近7天的备份数据,避免浪费磁盘空间

      5.准备好backup服务器用于接收gitlab服务端推送过来的备份数据
      6.backup服务器需要每天早上5点校验gitlab服务端推送过来的数据是否完整
      7.backup服务器需要每天校验的结果进行判断,如果数据不完整,则邮件将详细信息进行邮件通知,否则不通知
      8.服务端仅保留 1 个月的备份数据,其余的全部删除

    2.脚本总结

    1.gitlab服务端脚本

     这里注意脚本执行之前创建好对应的备份主目录,安装rsync服务,和配置好邮件服务,让gitlab服务端可以对外发送邮件。

    [root@github-no gitlab]# cat /data/gitlab-backup.sh 
    #!/bin/bash
    #定义相关变量
    PATH
    =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin Host=$(hostname) Addr=$(ifconfig enp94s0f0|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date} email="boliu16@iflytek.com" Path=/iflytek/git-backup
    #判断备份目录是否当天的备份目录是否生成,否的话,就创建当天对应备份目录 [
    -d $Path/$Dest ] || mkdir -p $Path/$Dest #判断当天备份目录是否有对应备份文件了,有就直接跳过,没有的话执行对应备份打包步骤。
    [
    -f $Path/$Dest/git_conf.tar.gz ] || tar czPf $Path/$Dest/git_conf.tar.gz /etc/gitlab && [ -f $Path/$Dest/git_nginx.tar.gz ] || tar czPf $Path/$Dest/git_nginx.tar.gz /var/opt/gitlab/nginx/conf && [ -f $Path/$Dest/gitlab_backup.tar.gz ] || gitlab-rake gitlab:backup:create >> $Path/$Dest/gitlab-backup.log && tar czPf $Path/$Dest/gitlab_backup.tar.gz /disk1/gitlab/backups
    #对备份文件打上标签,携带 md5 验证信息
    [
    -f $Path/$Dest/flag_$Date ] || md5sum $Path/$Dest/*.tar.gz > $Path/$Dest/flag_$Date #推送本地数据至备份服务器
    export RSYNC_PASSWORD=iflytek_zf@2020 rsync -avz $Path/ iflytek_zf@172.31.242.190::git-backup #对推送结果进行判断,推送失败的话,发送对应提醒邮件。
    if [ $? -eq 0 ];then echo -e "$Date ------------stop rsync-----------" >> $Path/$Dest/gitlab-backup.log echo -e "主机:$Host 机器IP:$Addr 时间:$Date 描述:CI平台gitlab备份成功!" >> $Path/$Dest/gitlab-backup.log else echo -e "$Date ------------stop rsync-----------" >> $Path/$Dest/gitlab-backup.log echo -e "主机:$Host 机器IP:$Addr 时间:$Date 描述:CI平台gitlab备份失败!"| mail -s "备份反馈" $email fi
    #本地保留最近 7 天的数据 find $Path/ -type d -mtime +7|xargs rm -rf
    #编写对应定时任务,操作和vim很像
    [root@github-no data]# crontab -e
    #查看当前用户的定时任务设置情况,我这里为了服务器时间准确做了每5分钟向时间服务器同步一次时间,然后就是每天的凌晨1点钟执行备份脚本。
    [root@github-no data]# crontab -l
    */5 * * * * /usr/sbin/ntpdate 172.16.100.21
    0 1 * * * /usr/bin/bash /data/gitlab-backup.sh > /dev/null 2>&1

    2.backup服务器脚本

    [root@no git-backup]# cat gitlab_check_backup.sh 
    #!/bin/bash
    #定义全局的变量和局部变量
    export PATH
    =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin Path=/iflytek/git-backup Date=$(date +%F) email="boliu16@iflytek.com" #查看 flag 文件,并对该文件进行校验, 然后将校验的结果保存至 result文件中。
    find $Path/ -type f -name "flag_$Date"|xargs md5sum -c > $Path/result_${Date} #判断上面效验结果,失败就发送提醒邮件
    if [ $? -ne 0 ];then mail -s "Rsync Backup $Date" $email < $Path/result_${Date} fi
    #删除超过 7 天的校验结果文件, 删除超过 30天的备份数据文件
    find $Path/ -type f -name "result*" -mtime +7|xargs rm -rf find $Path/ -type d -mtime +30|xargs rm -rf
    [root@github-no data]# crontab -e
    [root@github-no data]# crontab -l
    */5 * * * * /usr/sbin/ntpdate 172.16.100.21
    0 5 * * *  /usr/bin/bash /iflytek/git-backup/gitlab_check_backup.sh > /dev/null 2>&1
  • 相关阅读:
    Oracle中查看所有表和字段以及表注释.字段注释
    利用Excel表格中的宏,轻松提取首字母
    IntelliJ IDEA 14 注册码
    oracle initialization or shutdown in progress解决方法
    IIS6.0 IIS7.5应用程序池自动停止的解决方法
    Yii1.1测试环境配置(一)
    流行界面库
    delphi image控件上画矩形的问题
    delphi中TQueue的使用问题
    ShellExecute函数的问题
  • 原文地址:https://www.cnblogs.com/qingbaizhinian/p/13853130.html
Copyright © 2011-2022 走看看