首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rsync文件通过不可靠的网络链接-挂起而不是超时

Rsync文件通过不可靠的网络链接-挂起而不是超时
EN

Stack Overflow用户
提问于 2019-08-28 03:45:50
回答 2查看 676关注 0票数 2

我正在尝试保持3个大目录(9G,400G,800G)在我们的主站点和另一个很远很远的地方之间的同步,通过一个有点不可靠的网络链接(速度很慢,偶尔会掉下来)。数据是在安装之前复制到磁盘上的,因此rsync只需要发送更新。我遇到的问题是rsync在客户端挂起了几个小时。较小的9G作业完成后,400G作业已处于不确定状态15小时-在此期间没有输出到日志文件,但尚未超时。

我为此所做的设置(在阅读了许多关于rsync/rsync server/ many的论坛文章后,因为我不是真正的系统管理员)

我在本地系统上设置了rsync服务器(/etc/rsyncd.conf),将其导入到xinetd中,并编写了一个脚本在远程服务器上运行rsync,如果rsync在尝试处理不可靠的网络时失败,它就会循环。脚本中的rsync命令如下所示:

代码语言:javascript
复制
rsync -avzAXP --append root@homesys01::tools /disk1/tools

注意"-P“选项等同于"--progress --partial”

我可以在日志文件中看到,rsync在某一时刻确实失败了,循环重新启动了rsync,之后根据日志文件中的条目传输了数据,但最后一次更新日志文件是在15小时前,客户端上的rsync进程仍在运行。

代码语言:javascript
复制
   CNT=0
   while [ 1 ]
   do
       rsync -avzAXP --append root@homesys01::tools /disk1/tools
       STATUS=$?
       if [ $STATUS -eq 0 ] ; then
           echo "Successful completion of tools rsync." 
           exit 0
       else
           CNT=`expr ${CNT} + 1`
           echo " Rsync of tools failure. Status returned: ${STATUS}"
           echo "   Backing off and retrying(${CNT})..."
           sleep 180
       fi
   done

因此,我预计这些作业将花费很长时间,我希望在日志文件(我有)中看到偶尔出现的失败消息,并看到rsync重新启动(它确实有)。我没想到rsync会挂起15个小时或更长时间,没有任何进展,也没有超时错误。

有没有一种方法可以判断客户端上的rsync是否挂起,而不是处理不可靠的网络?

我在/etc/rsyncd.conf文件中没有设置超时。我是否应该以及如何确定合理的超时设置?

我将rsync设置为可通过xinetd使用,但并不总是看到"rsync --daemon“进程正在运行。如果我从远程系统运行rsync,它将重新启动。但是它不是应该一直运行吗?

如有任何指导或建议,将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2019-08-28 16:07:26

要使用verbose选项告知rsync客户端的工作状态并保留日志文件,请更改此行

代码语言:javascript
复制
 rsync -avzAXP --append root@homesys01::tools /disk1/tools 

代码语言:javascript
复制
 rsync -avzAXP --append root@homesys01::tools /disk1/tools  >>/tmp/rsync.log.`date +%F`

这将在尾部目录下每天生成一个日志文件,然后您可以使用/tmp -f命令来跟踪最新的日志文件,如果它正在滚动,则它正在工作

另请参阅rsync - what means the f+++++++++ on rsync logs?以了解有关日志的更多信息

票数 1
EN

Stack Overflow用户

发布于 2019-09-04 04:22:49

我想我会发布我的最终解决方案,以防它能帮助其他任何人。我添加了--timeout 300和--append-verify。超时消除了rsync无限期挂起的情况,循环将在超时后重新启动。append-verify是必要的,让它检查它更新的任何部分文件。

注以下代码在shell脚本中,输出被重定向到日志文件。

代码语言:javascript
复制
CNT=0
while [ 1 ]
do
    rsync -avzAXP --append-verify --timeout 300  root@homesys01::tools /disk1/tools
    STATUS=$?
    if [ $STATUS -eq 0 ] ; then
        echo "Successful completion of tools rsync." 
        exit 0
    else
        CNT=`expr ${CNT} + 1`
        echo " Rsync of tools failure. Status returned: ${STATUS}"
        echo "   Backing off and retrying(${CNT})..."
        sleep 180
    fi
done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57681316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档