Bash 如果缺少连接,请重新启动rsync

Bash 如果缺少连接,请重新启动rsync,bash,backup,Bash,Backup,我每周在本地网络上下载一次rsync远程服务器备份。 为此,我创建了一个bash脚本,并将crontab设置为每周启动一次 问题是:如果由于任何原因在夜间互联网崩溃,rsync会停止同步 我要求rsync在缺少连接的情况下重试重新启动。 我怎么修理它? 以下是脚本: #!/bin/bash EMAIL="myemail@gmail.com" MAIL="$(which mail)" RSYNC="$(which rsync)" DATA="$(date +"%d-%m-%Y")" BackupD

我每周在本地网络上下载一次rsync远程服务器备份。 为此,我创建了一个bash脚本,并将crontab设置为每周启动一次

问题是:如果由于任何原因在夜间互联网崩溃,rsync会停止同步

我要求rsync在缺少连接的情况下重试重新启动。 我怎么修理它? 以下是脚本:

#!/bin/bash
EMAIL="myemail@gmail.com"
MAIL="$(which mail)"
RSYNC="$(which rsync)"
DATA="$(date +"%d-%m-%Y")"
BackupDIR="/media/back_up/Remote_repository"

$RSYNC -avxz --bwlimit=2000 root@xxx.xxx.xxx.xxx:/backup $BackupDIR/
echo "Backup Done" | $MAIL -s "Backup of $DATA  synchronized on local network" $EMAIL

如果rsync失败,它将返回一个非零结果。比如说:

backup() {
  $RSYNC -avxz --bwlimit=2000 root@xxx.xxx.xxx.xxx:/backup $BackupDIR/
}

backup
while [ ! $? ]; do
  backup
done

检查
rsync
进程的退出代码,如果发现与网络问题有关的问题,请重复该代码;根据手册页,插座I/O中的错误通常为
10
,但也可能发生
23
30
35
。实际上,我会记录一段时间内您得到的值,并相应地调整脚本:

while true
do
  $RSYNC -avxz --bwlimit=2000 root@xxx.xxx.xxx.xxx:/backup $BackupDIR/
  exitCode=$?
  case $exitCode in
    10)
    23)
    30)
    35)
      echo "$(date): rsync finished with a network related error: $exitCode"
      ;;
    0)
      echo "$(date): rsync finished without error"
      break  # leave the while loop
      ;;
    *)  # all other cases
      echo "$(date): rsync finished with an unexpected error: $exitCode"
      break  # we don't know whether repeating it makes sense
      ;;
  esac >> $LOGFILE
done