每周一次,我在本地网络中使用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
答案 0 :(得分:1)
backup() {
$RSYNC -avxz --bwlimit=2000 root@xxx.xxx.xxx.xxx:/backup $BackupDIR/
}
backup
while [ ! $? ]; do
backup
done
答案 1 :(得分:1)
检查rsync
进程的退出代码,如果遇到与网络问题有关的问题,请重复此步骤;根据手册页,通常10
套接字I / O 中的错误,但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