Svn
如何讓 SVN 備份 cron 工作?
我試圖讓這裡的腳本在我的 Ubuntu 伺服器上執行,以通過 cron 備份 SVN 儲存庫。
#!/bin/bash BACKUP_DIR="/backup/repository" REPOSITORY_DIR="/home/svn/repository" #search in repository folder to find all the repository names ls -Al --time-style=long-iso /home/svn/repository/ | grep '^d' | awk '{print $8}' | while read line do if [ ! -d $BACKUP_DIR"/"$line ]; then mkdir $BACKUP_DIR"/"$line fi #Getting revision number REVISION=`cat $REPOSITORY_DIR"/"$line"/db/current" | awk '{print $1}'` #Archive last backup tar -czf $BACKUP_DIR"/"$line"-last.tar.gz" $BACKUP_DIR"/"$line"/" #Dangerous :) if [ -n "$BACKUP_DIR" ]; then rm -rf $BACKUP_DIR"/"$line"/*" fi #Check to see if exists a hot backup if [ -d $BACKUP_DIR"/"$line"/"$line"-"$REVISION ]; then echo "Skipping Backup ! Backup Already Exists" else echo "Doing backup for "$line /usr/bin/svn-hot-backup $REPOSITORY_DIR"/"$line $BACKUP_DIR"/"$line fi done
我已將路徑更改為正確的路徑,並且安裝了 subversion-tools,但是如果我嘗試執行 sudo bash svnbackup.sh,則會收到以下錯誤:
: command not foundline 2: svnfullbackup.sh: line31: syntax error near unexpected token 'done' svnfullbackup.sh: line31: 'done'
我認為這些錯誤是 cron 在指定時間無法工作的原因。我該如何修復它們?
“找不到命令”錯誤看起來像是被覆蓋了,這表明行尾類型錯誤。在您的腳本文件上執行
dos2unix
以解決該問題。有可能是其他的流浪角色。hexdump
使用或來顯示你的腳本cat -v
。當您在 Unix 文件上使用 Windows 編輯器時,通常會出現此問題。而不是這一行:
ls -Al --time-style=long-iso /home/svn/repository/ | grep '^d' | awk '{print $8}' | while read line
用這個:
find "$REPOSITORY_DIR" -maxdepth 1 -type d | while read -r line
which 不依賴於
ls
which 不用於腳本/管道。在文件名包含空格的情況下,這樣做也更有可能起作用。您可以按照自己的方式進行引用,但此範例可能會更好,因為如果文件名中有空格,它可以工作:
if [ ! -d "$BACKUP_DIR/$line" ]; then mkdir "$BACKUP_DIR/$line"
最好使用
$()
而不是反引號,並且cat
是不必要的(也簡化了引用):REVISION=$(awk '{print $1}' "$REPOSITORY_DIR/$line/db/current" )
還有更多地方可以簡化引用。