backupGitblitToOtherService.sh
#/bin/bash
# 注意1:使用此脚本前必须在本机运行 【ssh-keygen】生成公私密钥文件,然后用【ssh-copy-id -i 本机公钥文件 远程用户名@远程IP】将本机公钥给远>程主机
#
# 注意2:迁移到其他机器使用:只需修改 sourceGitbliDir targetGitblitDir targetIp 变量即可
# 本机gitblit目录
sourceGitbliDir=/www/server/gitblit_local/gitblit-1.9.3
sourceDirDataGit=${sourceGitbliDir}/data/git
# 远程主机gitblit的目录
targetGitblitDir=/www/server/gitblit_local/gitblit-1.9.3
targetLinuxUser='root'
targetIp='192.168.80.129'
targetDirData=${targetGitblitDir}/data
# 远程IP地址检测
echo "====检测目标地址${targetIp}网络连通性,请耐心等待===="
if ( ping -c 2 ${targetIp} &>/dev/null ); then
echo "目标地址${targetIp}:通"
else
# 直接退出整个Shell脚本
echo "错误:目标地址${targetIp}:不通,请检查当前主机与目标主机网络连通性"
exit 1
fi
echo '====开始备份===='
echo "本机即将备份的源目录:【${sourceDirDataGit}】"
echo "远程目标IP地址、用户、目标目录: ${targetIp}、${targetLinuxUser}、【${targetDirData}】"
if (ssh root@${targetIp} test -e ${targetGitblitDir}); then
echo '备份模式:仅备份data/git仓库、以及用户账号密码数据'
echo '====备份中,请耐心等待===='
# 运行此脚本时不将复制的文件日志显示出来,如果需显示请删掉 【 >/dev/null 2>&1】
scp -r ${sourceDirDataGit} ${targetLinuxUser}@${targetIp}:${targetDirData} >/dev/null 2>&1
scp ${sourceGitbliDir}/data/users.conf ${targetLinuxUser}@${targetIp}:${targetDirData}/users.conf >/dev/null 2>&1
else
echo '备份模式:Gitblit整个程序全量备份'
echo '====备份中,请耐心等待===='
targetGitblitParentDir=$(readlink -f ${targetGitblitDir} | xargs dirname)
# 创建Gitblit目录的父目录,因为scp不会主动创建父目录,不存在父目录则会传输报错
ssh root@${targetIp} "[ -d ${targetGitblitParentDir} ] || mkdir -p ${targetGitblitParentDir}"
# 运行此脚本时不将复制的文件日志显示出来,如果需显示请删掉 【 >/dev/null 2>&1】
scp -r ${sourceGitbliDir} ${targetLinuxUser}@${targetIp}:${targetGitblitParentDir} >/dev/null 2>&1
fi
echo '====结束备份===='
echo "====备份服务器${targetIp}重启Gitblit中,请耐心等待===="
ssh root@${targetIp} "cd ${targetGitblitDir}"' && ( [ -z "$(ps -ef | grep gitblit | grep -v grep)" ] || ( echo "关闭目标服务器的Gitblit" && sh gitblit-stop.sh &>/dev/null && sleep 5s ) ) && echo "启动目标服务器的Gitblit" && sh gitblit.sh &>/dev/null'
echo "====备份服务器${targetIp}重启Gitblit结束,访问浏览器查看备份情况===="
前提条件:源Gitblit的部署必须基于官方的脚本进行启动即gitblit.sh == 保证数据目录是在gitblit目录的data目录中