多服务器的rsync备份脚本

多服务器的rsync备份脚本

我有一个简单的脚本,可以使用 rsync 通过 ssh 从远程服务器备份数据。

我有为此的外部配置文件。在此配置文件中,我有变量:OPTIONS、REMOTE_IP、SOURCE 和 DESTINATION。

现在我需要添加更多远程服务器并开始对多个服务器使用单个脚本。我想用配置中的部分(如 [SERVER_01]、[SERVER_02]...)来定义它。

脚本:

# You can provide external configuration file if you specify it with -c option
# Then if you haven't specified it, use one from ~/rsync_script/config.cfg

if [[ $1 == -c ]]; then
    CONFIG_FILE=$2
else
    CONFIG_FILE=~/rsync_script/config.cfg
fi


# Add constants from config file to script's environment

if [[ -f $CONFIG_FILE ]]; then
    . $CONFIG_FILE
fi


# Create full path before running rsync, because rsync cannot mkdir with -p option
# Run rsync with parameters from config.cfg and put files to $DESTINATION/$REMOTE_IP/YYYY-MM-DD

if [[ -d $DESTINATION ]]; then
    mkdir -p $DESTINATION$REMOTE_IP/$(date +"%A")
    rsync -avx \
        --timeout=30 \
        $OPTIONS \
        rsync@$REMOTE_IP:$SOURCE $DESTINATION$REMOTE_IP/$(date +"%F")
else
        echo "failure"
fi

配置:

# Set extra options for rsync command
OPTIONS="--itemize-changes --log-file=changes.log"
# Set IP address of server the you want to backup
REMOTE_IP="192.168.11.123"
# Set the folder on remote server to backup
SOURCE="/home/rsync/somedata"
# Set the destination folder on local machine
DESTINATION="/backup/"

请给我建议解决这个问题的最佳方法

欢迎任何代码评论和建议:)

谢谢

答案1

这是一个可能的场景。将现有的 rsync 代码 ( if [[ -d $DESTINATION ...) 放入 shell 函数中,例如runbackup,并将执行的部分替换. $CONFIG_FILE为读取文件并查找[SERVER_...]节分隔符的循环。当它找到一个时,它会调用 runbackup 函数(第一个除外)。对于其他行,它eval在每行上的操作就像一样.。为了确保在最后一个部分调用 runbackup,[END]将在输入中添加一个虚拟部分。

(cat $CONFIG_FILE; echo '[END]') |
while read line
do if [[ "$line" =~ ^\[([A-Z_0-9]+)\] ]]
   then if [ -n "$OPTIONS" -a -n "$REMOTE_IP" ]
        then echo "section $section"
             runbackup
        fi
        section=${BASH_REMATCH[1]} # captured from =~ regex above
        unset OPTIONS REMOTE_IP SOURCE DESTINATION
   else eval $line
   fi
done 

相关内容