Fan Zhen Coder & Teacher

Subversion 版本库自动备份

2014-03-01

编写了两个rake任务,一个是增量备份,一个是完整备份,都通过ftp备份到另外一台服务器(192.168.1.8)的Subversion-Backup-Dir目录。

其中 tank/svn/ 是本地所有版本库的根目录,会遍历所有版本库,并上传ftp。使用的是 svn-backup-dumps.py Python脚本,是subversion自带的一个备份脚本,可以在 subversion/tools/server-side 目录找到。-i 参数指定增量备份, -z 压缩, -t 指定 ftp rakefile 内容如下:

desc "incremental backup subversion repos"
task :bk_svn do
  Dir.glob("/tank/svn/*").each do |repo|
    sh "python svn-backup-dumps.py -i -z -t ftp:192.168.1.8:user:password:Subversion-Backup-Dir  #{repo} /home/tmpbackup"
  	end
end

desc "Full backup subversion repos"
task :full_bk_svn do
Dir.glob("/tank/svn/*").each do |repo|
  sh "python svn-backup-dumps.py -z -t ftp:192.168.1.8:user:password:Subversion-Backup-Dir  #{repo} /home/svnfullbackup"
  end
  sh "rm /home/svnfullbackup/*"
end

这里会用到一个很好的ruby工具 whenever,用来产生 cron job

gem install whenever 安装

wheneverize . 初始化

会在 config 目录新建一个空的 schedule.rb 文件 编辑这个文件如下:

every :sunday, :at => '12:02 am' do # incremental dumps
rake "bk_svn"
end

every 30.days, :at => '4:02 am'  do # full dump
rake "full_bk_svn"
end

每周末进行增量备份,每30天完整备份。

whenever --update-crontab 生成 cron job

可以用 crontab -l来查看:

2 0 * * 0 /bin/bash -l -c 'cd /usr/home/root && RAILS_ENV=production rake bk_svn --silent'

2 4 1 * * /bin/bash -l -c 'cd /usr/home/root && RAILS_ENV=production rake full_bk_svn --silent'

最后重启 cron /etc/rc.d/cron restart


Comments