检查rsync是否成功

检查rsync是否成功

是否可以检查 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

答案1

与大多数程序一样,如果发生错误,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

相关内容