是否可以检查 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 命令置于条件中,以便脚本不会退出。如果要分析状态码,一个常见的习惯用法是
status=0; rsync … || status=$?
:这个命令总是返回一个成功状态,因为操作符右边的命令||
总是成功的,并且status
会被设置为 rsync 命令的状态。