我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
用来在远程服务器上进行身份验证。