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

我们定期将交互式信息亭cpu部署到远程网站,我开发了一个内容更新程序,可以在每个信息亭( Windows 7 Pro)和托管CMS(在linode.com上运行的虚拟化ubuntu服务器)之间执行媒体资产的夜间同步. .内容更新程序在C#/ .NET中创作,它使用Process.Start()生成子Unison进程. Unison配置为使用私钥通过SSH连接到远程服务器.

我们遇到的问题是,当从ContentUpdater.exe作为子进程生成时,Unison通常会在传输过程中停止与远程服务器通信并无限期挂起.没有简单的复制品 – 有时候它会起作用,而不是它会挂起.它似乎在更大的更新(400MB)上更脆弱,但这比其他任何东西更令人猜测.当它挂起时,客户端上的Unison进程(Windows 7)仍然显示25%的cpu利用率,服务器也显示同步进程正在运行 – 没有网络活动.我知道它是连接的,因为它总是启动过程并在转移中途,但它永远不会挂在同一个地方两次.我正在运行Unison-2.40.63.exe的本机Windows二进制版本,以及远程服务器上的同一版本的unison.

Windows上的Unison命令行如下所示:

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://cmsuser@server//home/cms/base-preview/webapps/ROOT/applications C:\kioskdir\temp\applications -force ssh://cmsuser@server//home/cms/base-preview/webapps/ROOT/applications

为了记录,我最初创作了内容更新程序以使用rsync(通过Windows上的cygwin),但是遇到了同样的问题.为了看看ssh运输是否是问题的一部分,我tried using rsync in server mode (rsyncd)但是悬挂继续抬头.

在这一点上,我彻底难倒.问题在其他服务器上也是如此,所以我认为这是在Windows方面的事情.我也倾向于认为问题只发生在从另一个进程内部的Process.Start()调用Unison / rsync时(UPDATE:我从命令行运行时只是让它重新编译) – 它似乎没有直接从命令行运行时失败. Unison / rsync也永远不会出错,因此没有要检查的日志文件(除非有人知道我可以检查远程服务器上的某种服务器端跟踪或日志文件 – 完全披露:我是FreeBSD的极客,并且知道关于Ubuntu的一点点珍贵).

提前感谢所有见解/想法/解决方案!

最好

解决方法

我有这个问题.我花了好几天才解决它.
结束添加-halfduplex解决了我的问题.

如文档中所述:

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

就我而言,我正在Windows / OSX之间进行同步.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...