编写了两个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