我们定期将交互式信息亭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
Run Code Online (Sandbox Code Playgroud)
为了记录,我最初创作了内容更新程序以使用rsync(通过Windows上的cygwin),但是遇到了同样的问题.为了查看ssh传输是否是问题的一部分,我尝试在服务器模式(rsyncd)中使用rsync,但挂起继续拖后头.
在这一点上,我彻底难倒.问题在其他服务器上也是如此,所以我认为这是在Windows方面的事情.我也倾向于认为问题只发生在从另一个进程内部的Process.Start()调用Unison/rsync时(UPDATE:我从命令行运行时只是让它重新编译) - 它似乎没有直接从命令行运行时失败.Unison/rsync也永远不会出错,因此没有要检查的日志文件(除非有人知道我可以检查远程服务器上的某种服务器端跟踪或日志文件 - 完全披露:我是FreeBSD的极客,并且知道关于Ubuntu的一点点珍贵).
提前感谢所有见解/想法/解决方案!
最好
Stackoverflow的新手,首先,你好.
我正在为我的学校做一个小项目,这应该是一个自定义的gui(用python编写,因为我从来没有使用python,因为我从未使用过python)是开源的Unison程序.我们试图允许学生和教职员在家里和学校同步一个文件夹,只需尽可能少的输入启动这个程序(如果你愿意的话,这是傻瓜式的).界面应该只是他们的学校用户名和密码,而gui包装器应该只是将用户名和密码发送给Unison并同步它们.
问题是Unison依次启动SSh并提示输入密码,但是python subprocess.communicate(输入)方法不会让ssh接受密码.我意识到ssh只接受来自终端的输入,我无法弄清楚如何欺骗它.我已经阅读了一些关于使用伪终端的东西,但我仍然难过.RSA密钥是理想的解决方案,但是生成它们然后将它们放在远程服务器上仍然需要我至少使用一次密码登录,这需要上面的解决方案,或者不是白痴证明的终端.
def startSync(self):
'''
'''
userName = self.userNameIn.get()
userPass = self.userPassIn.get()
localDir = "/Users/localuser/syncFolder/"
remoteDir = " ssh://schoolServer/remotesyncFolder" #for testing purposes, I set this to my own home machine which logs into my own account if I don't provide me@myserver.net
unisonExecRemotePath = " -servercmd /Users/RemoteMe/unison" #unison is the unix executable responsible for launching unison on the remote system
silenceCmdPrompts = " -silent" #keeps unison from displaying directory differences and asking if its okay to sync
executionString = …Run Code Online (Sandbox Code Playgroud) 如果你有节点运行并且我有节点运行,那么有没有人看到过一个允许我们保持一组文件同步的解决方案.
同步很复杂,所以我认为这可以留给像unison这样的工具(就像rsync一样),然后所有节点必须做的就是在经过身份验证的用户之间连接TCP管道.
filesystem1---unision==tcp==node.js------[http]----node.js==tcp====unison---filesystem2
Run Code Online (Sandbox Code Playgroud)
它可能大约有12行JavaScript,但到目前为止它已经超出了我,或者我能找到的任何一个例子.
我查看了一大堆其他文件同步选项(比如Git,准确性,化石,包括一周试图在Linux上安装Simias iFolder服务器,失败〜看起来很有希望因为它包含了每个主要操作系统的文件监视客户端)但现在我觉得有些东西,更简单可能就是这样.
如果有人看到这样做的Node.js项目,或者处于连接两个TCP管道并不太难的级别,那么我将不胜感激
在 Unison(双向文件同步程序)手册中,当您设置-times=true首选项时,只有文件的时间戳保持不变,目录不变:
从手册:
times 当此标志设置为 true 时,将传播文件修改时间(但不是目录修改时间)。
我想看看是否有任何方法可以在同步过程中保留目录时间?
我正在尝试从OS X机器到运行以下操作系统的linux盒使用统一:CentOS版本6.10(最终版)
我必须为Linux盒进行统一2.51的静态编译。这个版本是:
unison version 2.51.2 (ocaml 4.02.3)
Run Code Online (Sandbox Code Playgroud)
在OS X机器上,我使用了“ brew install unison”。这给了我:
unison version 2.51.2 (ocaml 4.08.1)
Run Code Online (Sandbox Code Playgroud)
如果我现在尝试使用统一,则会得到:
Fatal error during unmarshaling (input_value: ill-formed message), possibly because client and server have been compiled with differentversions of the OCaml compiler.
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能统一工作?
交互式unison命令行提供以下帮助:
Commands:
<ret> or f or <spc> follow unison's recommendation (if any)
n or j go to the next item
p or b or k go back to previous item
<del> or <bsp> revert then go back to previous item
0 go to the start of the list
9 go to the end of the list
5 go forward to the middle of the following items
6 go backward to the middle of the preceding items
R reverse …Run Code Online (Sandbox Code Playgroud) 由于我们无法将Eclipse的RSE设置为用于远程编辑的工具,因此我安装了Unison.但是如何让Eclipse在每个文件保存中自动运行unison?是否有可用的eclipse插件?
TIA
unison星形拓扑究竟是如何工作的?我有点理解一台机器充当HUB的概念,每个辐条都与它同步,但它只是一个概念,我必须自己实现它,或者这是一种内置于一致的功能?
如果我必须自己编写脚本,我将如何做到这一点,同步步骤是什么?
我需要在 OSX 上同步两个目录。我发现这篇文章推荐使用一致。
我试过一致,它似乎可以很好地同步两个目录。但它不会自动进行同步(当有任何变化时,始终保持两个目录同步)。
所以我想为了实现我的目的,unison 应该与触发器一起使用,它会观察变化并通知 unison 来完成它的工作。
但是怎么做呢?有什么推荐和教程吗?
如果我有文件夹A和B,是否可以将新文件从A同步到B,并且不删除在A中删除的B文件?
就是说,我想将B用作任何文件的大容器,包括我曾经从A同步并删除的文件。我认为这是一种“单向同步”。