如何让 SVN 备份 cron 运行?

如何让 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 无法在指定时间内运行的原因。我该如何修复它们?

答案1

“命令未找到”错误看起来像是被覆盖了,这表明行尾类型错误。运行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" )

还有更多地方可以简化引用。

答案2

我似乎找不到脚本中的任何错误,只是当存储库名称包含空格时它将不起作用......是这种情况吗?

相关内容