SVN 双机热备份(crontab定时)

来源:互联网 发布:无锡软件开发公司 编辑:程序博客网 时间:2024/06/12 18:27
svn服务用svnsync命令双机热备
 
源目录:            svn://srcIP/svndb 
目标目录:           svn://desIP/svndb 
步骤: 
如果目标目录存在相同的项目,请先清除,重新建立空项目,比如:
     mkdir -p /data/svndata/svndb 
     mkdir -p /home/svn/pro_bakup 
 
     svnadmin create /data/svndata/svndb 
     svnadmin create /home/svn/pro_bakup 
 
     2.启动从机上的svn
 
     svnserve -d -r /data/svndata/
     svnserve -d -r /home/svn/pro_bakup
 
    3.在从机上执行:
 
     cd /data/svndata/svndb/hooks
 
     cp  pre-revprop-change.tmpl  pre-revprop-change
 
     vi pre-revprop-change
 
     把 pre-revprop-change最后一行改成  exit 0,
    然后 chmod 755 pre-revprop-change
 
4.把主机上的/data/svndata/svndb/conf目录打个包,发到从机的同样路径,覆盖解压。
 
5. 在从机上执行  
   svnsync init file:///data/svndata/svndb svn://srcIP/svndb  
   svnsync init file:///home/svn/pro_bakup svn://192.168.1.234/root 
   
   
   中途会问你主机的root密码及svn的用户名 密码,填入即可。然后显示: 
   Copied properties for revision 0.(复制版本 0 的属性。)
 
6.初始化完成后,执行
svnsync sync file:///data/svndata/svndb 进行同步


svnsync sync file:///home/svn/pro_bakup   
svnsync sync --non-interactive file:///home/svn/pro_bakup  

svnsync sync file:///home/svn/pro_bakup


svnsync sync file:///home/svn/pro_bakup --username syncdor --password syncdor82821860


7.  为了能够在主机更新时,从机自动同步,需要在主机做些操作。
 在主机/hooks/下建立/修改post-commit脚本,最后两行替换为,内容如下:
 svnsync sync  --non-interactive svn://desIP/svndb  --username name --password pwd
 svnsync sync  --non-interactive svn://192.168.1.235  --username user --password user
 

更新同步
在源库的hooks下面,添加post-commit 脚本
可拷贝post-commit.tmpl

cp post-commit.tmpl post-commit
然后把 post-commit 中,最后两行替换为
svnsync sync  --non-interactive svn://192.168.1.235 --username syncdor --password syncdor82821860


即提交更新后,即执行同步命令,不进行交互
把post-commit 设为755权限。
chmod 755 post-commit
chmod +x post-commit
ps:
如果post-commit脚本出错,或者无可执行权限,在提交更新时会报错


修改原始版本库的地址
如果原始版本库的地址改变了(比如说换了域名或者IP地址),在svn中可以使用 svn relocate 来实现,但在svnsync中,就必须用propset来实现了,具体指令如下:


svn propget svn:sync-from-url –-revprop -r 0 file:///var/svn/project/
# 这个操作会显示原始版本库的地址(假如你忘了原始地址就很有用)
# http://192.168.1.234/root
 
# 设置新的版本库地址
svn propset svn:sync-from-url –-revprop -r 0 http://192.168.1.236/root file:///home/svn/pro_bakup 
# 再次同步
svnsync sync --noninteractive file:///home/svn/pro_bakup 


如报错:
svnsync: Destination HEAD (20030) is not the last merged revision (20029); have you committed to the destination without using svnsync?

svn propset --revprop -r 0 svn:sync-last-merged-rev 20029 file:///home/svn/pro_bakup 

报错
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
svnsync: Couldn't get lock on destination repos after 10 attempts

svn propdel svn:sync-lock --revprop -r0 file:///home/svn/pro_bakup

crontab设置
vi /home/bak_sh/svnsync.sh

svnsync sync file:///home/svn/pro_bakup --username username --password password --no-auth-cache


添加计划任务(修改/etc/crontab)
crontab -e
这时就像使用vi编辑器一样,可以对计划任务进行编辑
或者直接编辑 /etc/crontab


输入以下内容并保存:
0 */1 * * * root /home/bak_sh/svnsync.sh
(表示:每小时以root权限开始执行svnsync.sh脚本)
cron时间的格式是
分 时 日 月 周

保存退出!

重新启动crond
/etc/rc.d/init.d/crond restart
或者:
service crond restart

查看任务执行日志
# tail -f /var/log/cron



原创粉丝点击