Rsyncが成功したかどうかを確認し、成功しなかった場合はエラーを収集する可能性はありますか?
--link-destを使用しているので、これを検出するのは難しいかもしれません。
私はbashにかなり慣れていないので、どんなガイダンスもいただければ幸いです。
これは、私のスクリプトのスリムバージョンです。
#!/bin/bash
set -e
site_Host=(
"[email protected]"
"[email protected]"
)
backup_dest=(
"/Users/computername/Desktop/rsync/test1.co.uk"
"/Users/computername/Desktop/rsync/test2.co.uk"
)
now=`date "+%d/%m/%Y %H:%M:%S"`
today=`date +"%d-%m-%Y"`
yesterday=`date -v -1d +"%d-%m-%Y"`
log="/Users/computername/Desktop/rsync/rsync.log"
site_count=${#site_Host[@]}
for (( i = 0; i < site_count; i++ )); do
site_source="${site_Host[$i]}:~/public_html"
site_dest="${backup_dest[$i]}/$today/"
rsync -zavx -e 'ssh -p22' \
--numeric-ids \
--delete -r \
--link-dest=../$yesterday $site_source $site_dest
echo "$now - File Backup Completed - ${backup_dest[$i]}/$today" >> $log
done
更新しました:
#!/bin/bash
set -e
site_Host=(
"[email protected]"
"[email protected]"
)
backup_dest=(
"/Users/computername/Desktop/rsync/test1.co.uk"
"/Users/computername/Desktop/rsync/test2.co.uk"
)
now=`date "+%d/%m/%Y %H:%M:%S"`
today=`date +"%d-%m-%Y"`
yesterday=`date -v -1d +"%d-%m-%Y"`
log="/Users/computername/Desktop/rsync/rsync.log"
site_count=${#site_Host[@]}
for (( i = 0; i < site_count; i++ )); do
site_source="${site_Host[$i]}:~/public_html"
site_dest="${backup_dest[$i]}/$today/"
failures=0
if rsync -zavx -e 'ssh -p22' \
--numeric-ids \
--delete -r \
--link-dest=../$yesterday $site_source $site_dest;
then
echo "$now - File Backup Completed - ${backup_dest[$i]}/$today" >> $log
else
echo "$now - File Backup Failed - ${backup_dest[$i]}/$today" >> $log
failures=$((failures+1))
fi
if ((failures != 0)); then exit 1; fi
done
ほとんどのプログラムと同様に、rsyncはエラーが発生した場合にゼロ以外のステータスを返します。スクリプトの先頭にset -e
があるため、rsyncが存在する場合、スクリプトはゼロ以外のステータスで終了します。
Rsyncが失敗した場合に回復を行いたい場合は、続行してステータスを分析できます。 set -e
では、スクリプトが終了しないように、rsyncコマンドを条件付きで配置する必要があります。
failures=0
…
if rsync …; then
echo "rsync succeeded"
else
echo "rsync failed"
failures=$((failures+1))
fi
…
if ((failures != 0)); then exit 1; fi
ステータスコードを分析する場合、一般的なイディオムはstatus=0; rsync … || status=$?
です。||
演算子の右側のコマンドは常に成功するため、このコマンドは常に成功ステータスを返し、status
はrsyncコマンドのステータスに設定されます。
status=0
rsync … || status=$?
if ((status != 0)); then
…
fi