GitLab备份脚本
#!/bin/bash
# 备份执行日期
date=`date +%Y%m%d`
# 本地备份文件存放路径
local_backup_dir=/projects/gitlab/data/backups/
# 远程主机备份文件存放路径
remote_backup_dir=/opt/gitlab_backup/backup_file/
# 本地配置文件存放路径
local_config_dir=/projects/gitlab/config/
# 远程主机配置文件存放路径
remote_config_dir=/opt/gitlab_backup/config_file/
# 记录备份开始时间,%s seconds since 1970-01-01 00:00:00 UTC
date1=`date +%s`
# 执行备份
# docker exec -t gitlab gitlab-backup create > ${local_backup_dir}gitlab_backup_log_${date}.log
# 判断备份成功或者失败
if [ $? -eq 0 ]; then
# 记录备份完成时间,文件传输开始时间;%s seconds since 1970-01-01 00:00:00 UTC
date2=`date +%s`
# 获取最新的备份文件名称
newest_backup_file=`ls -lt ${local_backup_dir} | grep tar | head -n 1 | awk '{print $9}'`
# 备份文件大小
newest_backup_file_size=`du -hs "${local_backup_dir}${newest_backup_file}" | awk '{print $1}'`
# 备份文件夹里边保留的备份文件数量
backup_count=`ls -lt ${local_backup_dir} | grep tar | wc -l`
# GitLab服务器磁盘存储剩余
local_disk_size=`df -hT ${local_backup_dir} | awk 'NR==2 {print $5}'`
# 备份服务器的磁盘剩余
remote_disk_size=`ssh root@x.x.x.x df -hT ${remote_backup_dir} | awk 'NR==2 {print $5}'`
# 传输备份文件到备份服务器
###! The duration in seconds to keep backups before they are allowed to be deleted 备份保留7天
# gitlab_rails['backup_keep_time'] = 604800 单位:秒
# rsync --progress -a ${local_backup_dir} root@10.10.17.201:${remote_backup_dir} >> ${local_backup_dir}gitlab_backup_log_${date}.log
# 传输配置文件到备份服务器
rsync --progress -a ${local_config_dir} root@10.10.17.201:${remote_config_dir} >> ${local_backup_dir}gitlab_backup_log_${date}.log
# 需要考虑传输失败的情况,还有就是记录日志
# 记录文件传输完成时间,%s seconds since 1970-01-01 00:00:00 UTC
date3=`date +%s`
# 备份操作耗时:`$[$date2-$date1]` 文件传输耗时:`$[$date3-$date2]`
backup_time=$[($date2-$date1)/60]
transfer_time=$[($date3-$date2)/3600]
# 全程耗时:`$[$date3-$date1]`,单位转换秒、分钟、小时
all_time=$[($date3-$date1)/3600]
# 邮件通知:成功
echo "GitLab备份完成!!
备份文件存放路径,本机:${local_backup_dir} 备份服务器:${remote_backup_dir}
配置文件存放路径,本机:${local_config_dir} 备份服务器:${remote_config_dir}
备份操作耗时:${backup_time}分钟 文件传输耗时:${transfer_time}秒
全程耗时:${all_time}秒
本次备份:备份文件绝对路径:${local_backup_dir}${newest_backup_file} 备份文件大小:${newest_backup_file_size}
当前保留的备份文件数量为:${backup_count}份
GitLab服务器磁盘存储剩余:${local_disk_size} 备份服务器磁盘存储剩余:${remote_disk_size}" | mutt -s "GitLab备份成功-${date}" 18028543308@163.com
else
# 邮件通知:备份失败
echo "备份操作失败,具体原因请查看备份日志" | mutt -s "GitLab备份失败-${date}" 18028543308@163.com
fi