Bash
多台伺服器的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/"
請建議我解決此問題的最佳方法
歡迎任何程式碼評論和建議:)
謝謝
這是一個可能的情況。將您現有的 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