如果没有连接,请重新启动rsync

时间:2014-01-14 09:04:26

标签: bash backup

每周一次,我在本地网络中使用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

2 个答案:

答案 0 :(得分:1)

如果失败,rsync将返回非零结果。所以像这样:

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

backup
while [ ! $? ]; do
  backup
done

答案 1 :(得分:1)

检查rsync进程的退出代码,如果遇到与网络问题有关的问题,请重复此步骤;根据手册页,通常10 套接字I / O 中的错误,但23可能会发生3035。实际上,我会记录你得到一段时间的值并相应地调整脚本:

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