フォルダをローカルに同期してからリモートに同期したいと思います。
ループに閉じ込められ、ローカルサーバーがいっぱいになるようです。ソースフォルダは3.9 GBですが、ローカルサーバーには17 GBを超えています。
私が望むのは、フォルダをバックアップにローカルに再同期し、ソースフォルダを別のバックアップサーバーに再同期することです。何が間違っているのかわかりません。助けてください!
以下は完全なスクリプトです。
#!/bin/bash
# check that BACKUPDIR exists
BACKUPDIR="/home/deploy/backups"
if [ ! -d $BACKUPDIR ]; then
mkdir -p $BACKUPDIR/{directories,databases,logs}
else
:
fi
# set time variable
NOW=$(date +"%F_%H:%M") # year-month-day_hour:minute format
# set logs
LOCALLOG="$BACKUPDIR/logs/$NOW.webapps.log"
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>$LOCALLOG 2>&1
# Everything below will go to the file 'webapps.log'
# Remove files older than 7 days
find $BACKUPDIR/{directories,databases,logs} -mtime +8 -exec rm {} \;
# set directory variables
LOCALDIR="$BACKUPDIR/directories"
BKUP_SERV="[email protected]"
BKUP_DIR="/home/deploy/backups/$HOSTNAME/directories"
BKUP_LOG="/home/deploy/backups/$HOSTNAME/logs"
DJANGODIR="/usr/local/django"
WEBAPPSDIR="/webapps"
# set output variables
WEBAPPS_YES="SUCCESSFULL sync of webapps folder"
WEBAPPS_NO="FAILED to sync webapps folder"
RSYNC_YES="SUCCESSFULL rsync to log file"
RSYNC_NO="FAILED to rsync log file"
# check webapps or django folder to rsync
if [ ! -d "$WEBAPPSDIR" ]; then
rsync -avh "$DJANGODIR" "$LOCALDIR"
else
rsync -avh "$WEBAPPSDIR" "$LOCALDIR"
fi
RESULT1="$?"
# Outputs whether the rsync was successful or not
if [ "$RESULT1" != "0" ]; then
echo -e "EXIT Code:" $RESULT1 "\n$WEBAPPS_NO"
else
echo "$WEBAPPS_YES"
fi
# check webapps or django folder to rsync
if [ ! -d "$WEBAPPSDIR" ]; then
rsync -azvPh "$DJANGODIR" -e ssh "$BKUP_SERV":"$BKUP_DIR"
else
rsync -avzPh "$WEBAPPSDIR" -e ssh "$BKUP_SERV":"$BKUP_DIR"
fi
RESULT2="$?"
# Outputs whether the rsync was successful or not
if [ "$RESULT2" != "0" ]; then
echo -e "EXIT Code:" $RESULT2 "\n$RSYNC_NO"
else
echo "$RSYNC_YES"
fi
# Command to rsync 'webapps.log'
rsync -azvPh "$LOCALLOG" -e ssh "$BKUP_SERV":"$BKUP_LOG"
RESULT3="$?"
# Outputs whether the rsync was successful or not
if [ "$RESULT3" != "0" ]; then
echo -e "EXIT Code:" $RESULT3 "\n$RSYNC_NO"
else
echo "$RSYNC_YES"
fi
ベストアンサー1
変数$DJANGODIR
と$LOCALDIR
が有効なディレクトリであり、$BKUP_SERV
変数が有効なターゲットホストの場合、コマンドは合理的です。
この--dry-run
パラメータを使用して、何が起こっているのかを確認できます。
"$DJANGODIR"
スペースやその他の奇妙な文字がシェルで処理されるのを防ぐために、変数などを引用する必要があります。
-z
ローカルバックアップはこのフラグと暗黙の設定を無視します--partial
。
リモートバックアップは、ローカルバックアップが正常に完了した場合にのみ試行されます。これが正確で有用であるかどうかを考慮する必要があります。個人的には、あるバックアップが別のバックアップに依存することを望まないと思いますが、それは私のシステムではありません。