ファイルの準備ができたときに起動する SFTP サーバーといくつかのトリガーを設定しました。
完了する前に開始した場合、または接続でエラーが発生した場合は、最初にtmp
フォルダーに書き込み (SFTP プロトコルを使用)、コピーしたらnew
フォルダーに移動します。
1 つのフォルダー内のすべてのイベントを追跡し、もう 1 つのフォルダーを inotify で追跡しています。
inotifywait -m --format '%:e %f' new
inotifywait -m --format '%:e %f' tmp
tmp フォルダーにファイルを書き込むためのイベントは次のとおりです。
CREATE newFile
OPEN newFile
ATTRIB newFile
MODIFY newFile
MODIFY newFile
MODIFY newFile
ファイルをあるフォルダーから別のフォルダーに移動すると、bash から次のことがわかりました。
mv tmp/newFile new
MOVE_TO
イベントがトリガーされます。tmp フォルダー内:
CLOSE_WRITE:CLOSE newFile
MOVED_FROM newFile
新しいフォルダーで:
MOVED_TO newFile
ただし、SFTP を介して RENAME メソッドを使用してファイルを移動すると、移動しません。これらは、トリガーされたすべてのイベントです。
tmp フォルダー内:
CLOSE_WRITE:CLOSE newFile
DELETE newFile
新しいフォルダーで:
CREATE newFile
OPEN newFile
ACCESS newFile
CLOSE_NOWRITE:CLOSE newFile
これは SFTP のプロトコルの一部ですか? sftp でファイルを移動して、実際に MOVED_TO イベントをトリガーすることは可能ですか?
これは、私が使用している sftp クライアントの実装です: https://github.com/mscdex/ssh2-streams/blob/55fd9c36b6dca8dbf0588a1d6f450b85c784dc72/lib/sftp.js