我rsync过去也遇到过这种情况。为我修复的解决方案是在一个screen会话中运行它,该会话能够帮助维护与远程服务器的连接。
screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session
您可以通过运行来检查状态screen -x rsync(或者,如果确实给会话命名,则可以选择命名会话,这不是必需的)。这会将您当前的shell重新连接到该会话。只要记住在检查状态后再次与它分离,以使其在后台继续运行即可。
您还可以screen通过执行[某人,如果我错了,请纠正我] 来执行命令以在后台一次通过screen -dm 'command'。您可能想要man screen在尝试最后一个之前。
编辑:
我正在编辑我的答案,因为您已经确认screen在这种情况下不提供任何帮助,但是您回答了我的评论,建议您尝试scp看看所得到的结果是什么,您对此回答得很奇怪,效果很好。
所以我的新答案是: 使用scp-或ssh(with tar)-代替rsync
当然,scp不支持的功能,为广大的rsync,但你居然惊奇地发现有多少功能,它不支持,几乎等同于的rsync。
的真实场景scp和其他替代方案rsync:
前一段时间,我的任务是创建一个Shell脚本,该脚本将从生产服务器中提取日志并将其本地存储在Web服务器上,以便开发人员可以访问它们以进行故障排除。在尝试使Unix团队安装rsync在我们的服务器上失败后,我想出了一种使用scp该方法的解决方法。
话虽如此,我最近修改了脚本,以便确切地说,它使用的是ssh和tar- GNU tar/ gtar。GNU tar支持很多的选项,你会真正发现rsync,比如--include,--exclude,许可/属性保存,压缩等
我现在完成此操作的方法是-通过ssh远程服务器(通过pubkey auth)并使用gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]-将所有信息写入stdout,然后将其通过管道[本地]传输到tar -xzf远程生产服务器上,而无需进行任何更改,并将所有文件原样拉到本地服务器。rsync在这种情况下,它是一个很好的选择。既不重要tar也不scp支持的唯一重要事情是增量备份和该功能的块级错误检查级别rsync。
完整的命令我使用时,指的是ssh和tar会是这样的(遥控器是的Solaris 10;地方是Debian的,为它的价值):
cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz
在您的方案中,情况恰恰相反- tar -cf -在本地,并通过管道通过管道连接到远程服务器ssh user@remotehost "tar -xf -"-还有另一个答案引用了这种类型的行为,但没有涉及太多细节。
我还包括其他一些选项来加快处理速度。我无情地安排了所有时间,以尽可能缩短执行时间。您可能认为使用with压缩tar是没有意义的,但是实际上与使用-C标志with ssh启用ssh压缩一样,它可以使速度加快一点。我可能会在以后的某个日期更新此帖子,以包含我使用的确切命令(这与我发布的命令非常相似),但是由于我本周正在休假,所以我暂时不希望使用VPN。
在Solaris 10上,我也使用-c blowfish,因为它是进行身份验证的最快密码,并且还有助于加快处理速度,但是我们的Solaris 11不支持它,或者已禁用此密码套件。
此外,如果您选择使用ssh/ tar选项,那么screen如果要进行一段时间的备份,那么实施我最初使用的解决方案实际上是一个好主意。如果没有,请确保ssh_config正确调整了其中的keepalive / timeout设置,否则此方法也很可能导致管道损坏。
即使您一起使用scp,我也总是发现使用它screen或tmux进行这种操作是一种最佳做法,以防万一。很多时候,我没有遵循自己的建议,但没有做到这一点,但是,使用这些工具之一来确保远程活动不会因您的活动Shell会话断开连接而搞砸了,这的确是一个好习惯。
我知道您想找出问题的根本原因rsync。但是,如果这真的很重要,那么您可以同时尝试两种出色的解决方法。
kerberos用来在远程服务器上进行身份验证。