Svn

如何讓 SVN 備份 cron 工作?

  • July 15, 2010

我試圖讓這裡的腳本在我的 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 不依賴於lswhich 不用於腳本/管道。在文件名包含空格的情況下,這樣做也更有可能起作用。

您可以按照自己的方式進行引用,但此範例可能會更好,因為如果文件名中有空格,它可以工作:

if [ ! -d "$BACKUP_DIR/$line" ]; then
   mkdir "$BACKUP_DIR/$line"

最好使用$()而不是反引號,並且cat是不必要的(也簡化了引用):

REVISION=$(awk '{print $1}' "$REPOSITORY_DIR/$line/db/current" )

還有更多地方可以簡化引用。

引用自:https://serverfault.com/questions/160645