首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby Net-SFTP在上传时不阻塞

Ruby Net-SFTP在上传时不阻塞
EN

Stack Overflow用户
提问于 2011-08-28 03:56:57
回答 2查看 854关注 0票数 0

我正在使用ruby库Net-SFTP通过upload将文件的文件夹上传到远程服务器!命令,并发现当我重新获得控制权时,文件夹尚未完成上载。这并不重要,除非我需要更改此文件夹的权限,并且由于远程服务器上的umask,我无法通过upload命令完成这些操作。我在远程服务器上没有root帐户,所以基本上我需要等待文件夹在那里,然后更改它的权限。当我尝试更改权限时,有时文件夹还不在那里,但最终会显示出来。我想我的问题有两个方面。

1.)为什么不是阻塞调用上传!实际上在创建文件夹之前一直处于阻塞状态。2.)有没有办法通过较低级别的调用强制它阻塞,或者我必须等待几秒钟,然后轮询看看文件夹是否还在那里?

更新:我怀疑真正的问题是因为我试图通过单独的ssh连接更改权限,该连接可能与我登录到集群的机器相同,也可能不同。换句话说,文件夹已经在一台机器上创建了,但是当我尝试更改权限时,它还没有在其他机器上复制。有什么方法可以结束一个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2014-01-29 08:35:05

您可以尝试使用SFTP会话的底层SSH会话来运行命令:

代码语言:javascript
复制
Net::SSH.start("localhost", "user", "password") do |ssh|
  ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz")
  ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz"
end

http://net-ssh.github.io/net-sftp/classes/Net/SSH/Connection/Session.html

或者,您可以让SFTP更改权限:

代码语言:javascript
复制
sftp.setstat("/path/to/remote.file", :permissions => 0644)

http://net-ssh.github.io/sftp/v1/faq.html#2202822

票数 1
EN

Stack Overflow用户

发布于 2011-08-28 07:16:51

v2 SFTP文档特别说明了在操作完成之前,upload!会一直阻塞:

http://net-ssh.rubyforge.org/sftp/v2/api/classes/Net/SFTP/Session.html#M000116

但是,如果您正在运行并发SFTP或SSH会话,则只能靠您自己。您必须手动轮询才能完成操作,或者以其他方式同步您的会话。

要手动轮询,您可以使用类似于循环的方式,使用sleep不断检查远程端,直到您期望的文件夹出现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7216992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档