![Subversion 备份转储 - 只需要一些非常简单的东西](https://linux22.com/image/592838/Subversion%20%E5%A4%87%E4%BB%BD%E8%BD%AC%E5%82%A8%20-%20%E5%8F%AA%E9%9C%80%E8%A6%81%E4%B8%80%E4%BA%9B%E9%9D%9E%E5%B8%B8%E7%AE%80%E5%8D%95%E7%9A%84%E4%B8%9C%E8%A5%BF.png)
我有这个命令,它告诉我将对 Subversion 进行完整备份(如果不是这样请告诉我):
svnadmin dump /shared/svnrepos | gzip /shared/backup/snvfull.svn.gz
我不是 Linux 用户。我只是希望它每晚 7 点运行并每晚覆盖文件。但它需要相当长的时间才能运行(大约 4-5 小时创建一个 28GB 的文件)
有人能告诉我如何以 root 用户身份在 Linux 中将其设置为 cron 作业吗?(如果这很重要的话,那就是 Gentoo)
如果从“备份服务器”运行 Windows 任务更容易,只需告诉我如何通过 SSH 创建远程任务并以 root 用户身份运行该命令。
谢谢你!
PS,如果有更好/更简单的方法来备份大型 SVN,请告诉我...我对 Subversion 一无所知,但我仍然无法处理它。
答案1
你的命令将会起作用。
创建转储脚本,例如 svndump.sh
#!/bin/bash
date=`date +%Y-%m-%d`
svnadmin dump /shared/svnrepos | gzip /shared/backup/snvfull_$date.svn.gz
编辑 Crontab 文件crontab -e
添加
0 19 * * * root /path-to-svn-dump/svndump.sh file
每天晚上 7 点,这将转储你的文件
在 Windows 上创建一个 bat 文件,例如
for /F "tokens=6,7,8 delims=/ " %%i in ('echo.^|date^|find "current" ') do set today=%%k%%j%%i
set backupdate=%today%
cd "C:\backups\svn"
svnadmin dump "C:\svn_repository\your_repo" > "C:\backups\svn\yourbackup_%backupdate%.svn"
将此文件添加到计划作业中以便在所需时间运行。
答案2
svnadmin dump
应该可以工作,但您也可以使用svnandmin hotcopy
。我使用以下来自 cron 的脚本来备份多个存储库,压缩它们并保留最近几天的内容:
#!/bin/sh
#
# Backup-svn: Back up each repository under /svn using 'svnadmin hotcopy'.
svn_dir=/my/svn/directory
backup_dir=/my/svn/backup/directory
date_stamp=`date +%Y-%m-%d`
repo_list=`ls -d $svn_dir/*/conf | sed -e "s:^$svn_dir/::" -e 's:/conf$::'`
keep_days=5
renice 5 -p $$ > /dev/null 2>&1
ionice -c 3 -p $$ > /dev/null 2>&1
cd $backup_dir
for repo in $repo_list ; do
dest=$repo-$date_stamp
dest_tmp=$backup_dir/$dest
rm -rf $dest_tmp
date +"%F %T: Starting hotcopy for $repo"
svnadmin hotcopy $svn_dir/$repo $dest_tmp
date +"%F %T: Archiving $repo"
tar -czf $dest.tar.gz $dest_tmp
du -sh $dest.tar.gz $dest_tmp
date +"%F %T: Removing $repo"
rm -rf $dest_tmp &
for old_backup in `ls $repo-2*.tar.gz | sort -r | sed "1,${keep_days}d"` ; do
date +"%F %T: Removing $old_backup"
rm $old_backup
done
done