Bash 如果缺少连接,请重新启动rsync
我每周在本地网络上下载一次rsync远程服务器备份。 为此,我创建了一个bash脚本,并将crontab设置为每周启动一次 问题是:如果由于任何原因在夜间互联网崩溃,rsync会停止同步 我要求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
#!/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