SFTP転送をバッチで行うにはどうすればよいですか?
概要
コンテキスト: 私は約を持っています。 SFTP 経由で転送される 20K ファイル。 単一のセッションで送信すると、セッションが途中で終了する可能性があるのではないかと疑っています。 タイムアウトを検索しようとしましたが、アイドルセッションのタイムアウトが見つかりました。
そこで、500ファイルを一括で転送できる一括転送のようなものがないか探してみました。そして、各バッチの後に新しいセッションが開始されます。 Ruby の Net::SFTP ライブラリを使用しています
私の現在のコードは
Net::SFTP.start(host, username, :password => password, :port => port) do |sftp|
files.each do |file| # files is an array of filenames (with path)
puts "Transferring '#{file}' to #{host}.."
sftp.upload!(file, "/#{File.basename(file)}")
end
end
私が試したことは何ですか? バッチ処理のオプションが存在するかどうか、ドキュメントまたはいくつかのブログで検索しようとしました。
そのようなオプションがない場合は、以下のようにこれを処理する予定です
files.each_slice(500) do |batch|
Net::SFTP.start(host, username, :password => password, :port => port) do |sftp|
batch.each do |file| # files is an array of filenames (with path)
puts "Transferring '#{file}' to #{host}.."
sftp.upload!(file, "/#{File.basename(file)}")
end
end
end
解決策
タイムアウト値を見つけることができませんでしたが、より良いパフォーマンスを得るために使用しました
gem 'jsch_sftp'
詳細は https://github.com/AquisTech/jsch_sftp でご覧いただけます。