标签:shell open backup pre ack 行业 syn bash rsync
好久没写博客了,虽然也没写几篇^_^...露个脸,表示还活跃在互联网行业中...不说没用的了,分享一下如何实现Git服务间的同步。#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import pexpect
import paramiko
# 备份服务器的IP地址、用户名
git_src_host = "xxx.xxx.xxx.xxx"
git_src_user = "xxx"
git_src_port = "22"
# 地址自行根据环境变更
private_key = paramiko.RSAKey.from_private_key_file(‘/xxx/xxx/xxx/.ssh/id_rsa‘)
git_bak_dir = "/var/opt/gitlab/backups"
# Copy backup to xxx.xxx.xxx.xxx(查找备份服务器一天以内的备份传到恢复服务器所在备份目录)
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
hostname=git_src_host,
username=git_src_user,
port=git_src_port,
password=private_key)
cmd=("find " + git_bak_dir + " -type f -ctime -1")
stdin, stdout, stderr = ssh.exec_command(cmd)
for item in stdout.readlines():
chown_cmd="chown git:git " + git_bak_dir + "/*;chmod 700 " + git_bak_dir
rsync_cmd=(‘rsync -avzP ‘
+ git_src_user + ‘@‘
+ git_src_host + ‘:‘
+ item.strip(‘\n‘) + ‘ ‘
+ git_bak_dir)
#print(rsync_cmd)
os.system(rsync_cmd)
os.system(chown_cmd)
ssh.close()
except Exception, e:
print e
# Restore backup
ls_cmd="ls -t " + git_bak_dir + " | head -n 1 | sed -r ‘s/^([0-9]+_[0-9]+_[0-9]+_[0-9]+_.*)_gitlab_backup.tar/\\1/g‘"
rs=os.popen(ls_cmd)
restore_file=rs.read()
# print(restore_file)
os.system("gitlab-ctl stop unicorn;gitlab-ctl stop sidekiq")
expectations=["Do you want to continue (yes/no)?","Do you want to continue (yes/no)?",]
child = pexpect.spawn(‘gitlab-rake gitlab:backup:restore BACKUP=‘ + restore_file,timeout=1800)
child.logfile = sys.stdout
while True:
try:
i = child.expect(expectations)
if i == 0:
child.sendline(‘yes‘)
elif i == 1:
child.sendline(‘yes‘)
except pexpect.EOF:
print(‘Exiting fexpect for EOF.‘)
break
os.system("gitlab-ctl restart")
#!/bin/bash
#
git_src_host="xxx.xxx.xxx.xxx"
git_src_user="xxx"
git_bak_dir="/var/opt/gitlab/backups"
git_bak_file=`ssh ${git_src_user}@${git_src_host} "find ${git_bak_dir} -type f -ctime -1"`
# Copy backup to xxx.xxx.xxx.xxx
for bakfiles in $git_bak_file ; do
echo "------------------------------------"
rsync -avzP ${git_src_user}@${git_src_host}:${bakfiles} ${git_bak_dir}
echo $bakfiles
echo "------------------------------------"
done
chown git:root $git_bak_dir
chmod 700 $git_bak_dir
# Restore backup
restore_file=`ls -t $git_bak_dir | head -n 1 | sed -r ‘s/^([0-9]+_[0-9]+_[0-9]+_[0-9]+_.*)_gitlab_backup.tar/\1/g‘`
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
/bin/expect <<EOF
set time 30
spawn gitlab-rake gitlab:backup:restore BACKUP=$restore_file
expect "Do you want to continue (yes/no)?" {
send "yes\r";
}
expect "Do you want to continue (yes/no)?" {
send "yes\r";
}
expect "Do you want to continue (yes/no)?" {
send "yes\r";
}
expect "Do you want to continue (yes/no)?" {
send "yes\r";
}
expect "Do you want to continue (yes/no)?" {
send "yes\r";
}
expect eof
EOF
#gitlab-ctl reconfigure
gitlab-ctl restart
标签:shell open backup pre ack 行业 syn bash rsync
原文地址:https://blog.51cto.com/wanghaipeng1124/2486964