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는 오류가 발생하면 0이 아닌 상태를 반환합니다. set -e스크립트의 맨 위에 있으므로 rsync가 종료되면 스크립트는 0이 아닌 상태로 종료됩니다.

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=$?. 연산자 오른쪽에 있는 명령은 ||항상 성공하고 statusrsync 명령의 상태로 설정되기 때문에 명령은 항상 성공 상태를 반환합니다.

  status=0
  rsync … || status=$?
  if ((status != 0)); then
  fi

관련 정보