0

sftp 経由でデータ ファイルを受信する Linux サーバーがあります。これらのファイルには、アプリケーションにすぐにインポートして使用できるデータが含まれています。ファイルが送信されるディレクトリは、処理する新しいファイルを探している別のプロセスによって常に読み取られます。

私が抱えている問題は、ファイルが完全に転送される前に読み取られることです。転送する前にファイルを非表示にする方法はありますか?

私が考えたことの 1 つは、多くの sftp クライアントがファイルが完成する前に名前を変更するために使用する .filepart の概念を活用することです。私はクライアントを制御できないので、サーバー側でこれを行う方法はありますか?

または、パーミッションなどでこれを行う別の方法はありますか?

4

1 に答える 1

2

クライアントがファイルを読み取るのと同じファイルシステムにディレクトリを作成し、inotifywait を使用することで、同様の問題を解決しました。

ステージング ディレクトリに sftp し、inotifywait でそのステージング ディレクトリを監視します。

inotify が受信したファイルの「FILE_CLOSE」イベントを確認したら、クライアントが読み取るディレクトリにファイルを「mv」するだけです。

#!/bin/bash
inotifywait -m -e close --format "%f\n" /path/to/tmp | while read newfile
do
  mv /path/to/tmp/"$newfile" ~/real
done
于 2013-01-07T20:07:42.310 に答える