FTP 経由で着信ファイルを処理するサービスがあります。
Proftpd がインストールされている私の Debian サーバーでは、iNotify イベントを使用して、ファイル転送がいつ完了し、作業を開始できるかを判断しています。
ファイルが書き込まれなくなると、イベントがトリガーされます。
新しい Nikon D4 カメラと WT-5 ワイヤレス トランスミッタが APPE FTP コマンドを使用してファイルを送信することを発見するまで、これは完全に機能していました。
私が読んだことから、APPE FTPコマンドは、最初のチャンクがファイルを作成した後、サーバー上の既存のファイルに追加されるデータチャンクでファイルを送信するようです。
ただし、これにより、接続が閉じるまでファイルが1回ではなく数回通知されるため、いくつかのiNotifyイベントがトリガーされます。
ファイルが完了する前にファイルが処理されるため、処理されるとエラーが発生します。そして、一度処理したファイルは常に削除します。
私のこのサービスは着信ファイルを処理する際に高速である必要があるため、iNotify を使用したこのソリューションが本当に気に入りました。
私の質問は次のとおりです。ファイルサイズを確認したり、最終更新日を比較したりせずに、ファイル転送が実際に完了したかどうかを判断する方法はありますか?
proftpd でこれを行う方法を見つけようとしましたが、役に立ちませんでした。
xferlog は、同じファイルが数回完了したことを示しています。
Fri May 11 14:15:41 2012 2 host-95-199-17-243.mobileonline.telia.com 131072 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:43 2012 2 host-95-199-17-243.mobileonline.telia.com 262144 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:47 2012 3 host-95-199-17-243.mobileonline.telia.com 385624 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
最後の c は、転送が完了したことを意味します。
そのため、受信ファイルごとにファイルが実際に完了しているかどうかを確認する必要がある場合、実際に完了したファイルの不必要な遅延を意味します。
これは珍しい問題ではないようですが、何も見つかりません。
何か案は?