Verificando se o rsync foi bem-sucedido

2

É possível verificar se um rsync é bem-sucedido e potencialmente coletar um erro se não for?

Como estou usando --link-dest, acho que isso pode ser mais difícil de detectar.

Sou bastante novo para bater, então qualquer orientação seria apreciada.

Aqui está uma versão simplificada do meu script:

#!/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

Atualizado:

#!/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
    
por ccdavies 10.06.2018 / 11:52

1 resposta

6

Como a maioria dos programas, o rsync retorna um status diferente de zero se ocorrer um erro. Como você tem set -e no topo do script, seu script sairá com um status diferente de zero se o rsync for.

Se você quiser fazer alguma recuperação se o rsync falhar, você poderá continuar e analisar o status. Com set -e , você precisa colocar o comando rsync em uma condição para que o script não saia.

failures=0
…
  if rsync …; then
    echo "rsync succeeded"
  else
    echo "rsync failed"
    failures=$((failures+1))
  fi
…
if ((failures != 0)); then exit 1; fi

Se você quiser analisar o código de status, um idioma comum é status=0; rsync … || status=$? : esse comando sempre retorna um status de sucesso, pois o comando no lado direito do operador || sempre é bem-sucedido e status ser definido para o status do comando rsync.

  status=0
  rsync … || status=$?
  if ((status != 0)); then
    …
  fi
    
por 10.06.2018 / 13:34