0

ruby ライブラリ Net-SFTP を使用して、アップロードを使用してファイルのフォルダーをリモートサーバーにアップロードしています! コマンドを実行して、制御を取り戻したときに、フォルダーのアップロードが完了していないことがわかりました。このフォルダーのアクセス許可を変更する必要があり、リモート サーバーの umask が原因でアップロード コマンドを使用してそれらを達成できないという事実を除けば、それほど重要ではありません。私はリモート サーバーに root アカウントを持っていないので、基本的にはフォルダーが存在するのを待ってから、そのアクセス許可を変更する必要があります。アクセス許可を変更しようとすると、フォルダーがまだ存在しない場合がありますが、最終的には表示されます。私の質問は二重だと思います。

1.) ブロッキング呼び出しでアップロードしないのはなぜですか! フォルダが作成されるまで実際にブロックします。2.) 低レベルの呼び出しで強制的にブロックする方法はありますか? または、数秒待ってからポーリングして、フォルダーがまだ存在するかどうかを確認する必要がありますか?

更新: 本当の問題は、クラスターにログインしているマシンと同じマシンである場合と異なる場合がある別の ssh 接続を介してアクセス許可を変更しようとしているためだと思われます。つまり、フォルダーは 1 台のコンピューターで作成されていますが、アクセス許可を変更しようとするまでに他のコンピューターに複製されていません。質問を閉じる方法はありますか?

4

2 に答える 2

1

SFTP セッションの基礎となる SSH セッションを使用してコマンドを実行してみてください。

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 にアクセス許可を変更させることもできます。

sftp.setstat("/path/to/remote.file", :permissions => 0644)

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

于 2014-01-29T00:35:04.527 に答える
0

v2 SFTP ドキュメントupload!には、操作が完了するまでブロックすることが具体的に記載されています。

ただし、同時 SFTP または SSH セッションを実行している場合は、自分で行う必要があります。操作を完了するには、手動でポーリングするか、別の方法でセッションを同期する必要があります。

手動でポーリングするにsleepは、期待するフォルダーが表示されるまでリモートエンドを継続的にチェックするために使用するループのようなもので行うことができます。

于 2011-08-27T23:16:51.427 に答える