Windows/Linux之间的同步同步在传输过程中随机挂起

问题描述:

我们经常将交互式自助终端CPU部署到远程物理站点,并且我开发了一个内容更新应用程序,在每个自助服务终端(Windows 7 Pro)和托管CMS(在linode.com上运行的虚拟化Ubuntu服务器)。内容更新程序以C#/ .NET编写,并使用Process.Start()生成一个Unison子进程。 Unison配置为使用私钥通过SSH连接到远程服务器。Windows/Linux之间的同步同步在传输过程中随机挂起

我们碰到的问题是,当从ContentUpdater.exe生成子进程时,Unison通常会在传输过程中停止与远程服务器的通信并无限期地挂起。没有简单的再生产 - 有时它可以工作,通常不会挂起。在较大的更新(400MB +)上似乎更脆弱,但这比其他任何更多的猜测。当它挂起时,客户端(Windows 7)上的Unison进程仍显示25%的CPU利用率,并且服务器还显示正在运行的unison进程 - 没有网络活动。我知道它是连接的,因为它总是启动过程并在转移过程中取得成功,但它永远不会在同一个地方挂两次。我正在运行Unison-2.40.63.exe的本地Windows二进制版本,以及远程服务器上的同一版本的unison。

在Windows同音命令行的样子:

Unison-2.40.63.exe -contactquietly -silent -batch -sshcmd "C:\KioskManagement\Apps\ssh2plink.bat" -sshargs "-p 22 -i C:\cygwin\home\someuser\.ssh\contentupdater-rsync-key.ppk" -ignore "Path {innovations,todaytomorrow,scale,mooreslaw,brilliantminds,askafab}" ssh://[email protected]//home/cms/base-preview/webapps/ROOT/applications C:\kioskdir\temp\applications -force ssh://[email protected]//home/cms/base-preview/webapps/ROOT/applications 

为了记录在案,我原本撰写了内容更新到(在Windows上通过Cygwin)使用rsync,但被击中了同样的问题。要看看ssh运输是否是问题的一部分,我tried using rsync in server mode (rsyncd)但悬挂继续后面的头。

在这一点上,我彻底难倒了。这个问题也在其他服务器上重演,所以我认为它在Windows的一面。我也倾向于认为只有在从另一个进程(更新:我刚从命令行运行时才得到repro)调用Unison/rsync从Process.Start()调用时才会出现问题 - 它似乎并不从命令行直接运行时失败。 Unison/rsync也不会出错,所以没有日志文件可以检查(除非有人知道我可以检查远程服务器上的某种服务器端跟踪或日志文件) - 完全公开:我是FreeBSD极客,并且知道引擎盖下的Ubuntu很少)。

在此先感谢您提供任何洞见/想法/解决方案!

最好

只是在鸣;我在两台Windows 7计算机之间使用rsync/cygwin遇到同样的问题。网上较旧的讨论表明,该问题仅影响SSH连接,但rsync守护进程方法失败。有消息假装应该重新编译rsync来源,取消设置HAVE_SOCKETPAIR,也就是说让rsync/ssh工作。我还没有到处去尝试。

+0

这似乎不是一个答案。 – 2012-10-19 20:58:12

我有这个问题。花了我好几天的时间来解决它。 最后,加入-halfduplex解决了我的问题。

如文档中所述:

半双工 当这个标志被设置为true,同音网络通信被强制为半双工(客户端和服务器从来不同时发射数据)。如果您的网络链接不稳定,这可能会有所帮助。由于可能导致死锁的Unison当前实现的局限性,与Windows机器同步时,通信始终为半双工。

就我而言,我是在Windows/OSX之间进行同步。

我确认“halfduplex = true”设置解决了我悬置的问题。我设置了Win7和OSX“客户端”和Linux服务器作为*同步点。所有客户端都与服务器同步。

当我将Mac客户端引入图片后开始出现问题,此后更新开始发生在两个方向。在Unison配置文件中设置“halfduplex = true”解决了我的问题。

奇怪的是,Unison在两台Win7客户端和Linux服务器之间同步了一个小得多的目录,但是在这种情况下文件要小得多。