| function rsync-retry () { |
| if [ -z $1 -o -z $2 ] |
| then |
| echo "Invalid arguments. Usage is rsync-retry FROMDIR TODIR [verbose] [maxtrys] [pausetime]" |
| return 1 |
| fi |
| local FROMDIR=$1 |
| local TODIR=$2 |
| if [ -z $3 ] |
| then |
| local verboseFlag=false |
| else |
| local verboseFlag=$3 |
| fi |
| |
| if [ -z $4 ] |
| then |
| local maxTrys=5 |
| else |
| local maxTrys=$4 |
| fi |
| |
| if [ -z $5 ] |
| then |
| local nPauseTime=120s |
| else |
| local nPauseTime=$5 |
| fi |
| |
| local rsyncArgs="aru" |
| if [ $verboseFlag ] |
| then |
| rsyncArgs="${rsyncArgs}v" |
| fi |
| |
| exitCode=-1 |
| nTrys=0 |
| |
| until [ $exitCode == 0 ] |
| do |
| ${REMOTE_SSH_COMMAND} rsync -${rsyncArgs} ${FROMDIR} ${TODIR} |
| exitCode=$? |
| if [ $exitCode != 0 ] |
| then |
| nTrys=$(($nTrys + 1)) |
| if [ $verboseFlag ] ; then |
| echo "rsync failed with $exitCode. Retrying $nTrys times after $nPauseTime." |
| if [ $nTrys -gt $maxTrys ] ; then |
| echo "Number of re-trys exceeded. rsync exit code: $exitCode" |
| return $exitCode |
| fi |
| sleep $nPauseTime |
| fi |
| fi |
| done |
| |
| return $exitCode |
| } |