大きなファイルや接続速度が遅い場合、ファイルのコピーに時間がかかることがあります。
pyinotifyを使用して、IN_CREATEイベントコードを監視しています。しかし、これはファイル転送の開始時に発生するようです。ファイルが完全にコピーされたときを知る必要があります-ファイルが半分しかない場合はあまり役に立ちません。
ファイル転送が終了して完了すると、どのinotifyイベントが発生しますか?
IN_CLOSE
おそらく書き込みが完了したことを意味します。一部のアプリケーションは悪意のあるアクターであり、それらを操作している間は常にファイルを開いたり閉じたりするため、これは確かではありませんが、処理しているアプリ(ファイル転送など)を知っていて、その動作を理解している場合は、おそらく大丈夫です。(これは、転送が正常に完了したことを意味するわけではありません。明らかに、ファイルハンドルを開いたプロセスがファイルハンドルを閉じたことを意味します)。
IN_CLOSE
との両方IN_CLOSE_WRITE
をキャッチIN_CLOSE_NOWRITE
するので、そのうちの1つだけをキャッチするかどうかを自分で決定します。(おそらく両方が必要です-WRITE/NOWRITE
書き込みが実際に行われたかどうかではなく、ファイルのアクセス許可に関係している必要があります)。
Documentation / filesystems / inotify.txtには、さらに多くのドキュメントがあります(ただし、この情報ではありません)。
私の場合、ファイルが完全にアップロードされた後にスクリプトを実行したいと思いました。.filepart
完了するまで拡張子が付いた大きなファイルを書き込むWinSCPを使用していました。
最初に、ファイル自体が.filepartで終わる場合、または同じディレクトリに同じ名前で.filepart拡張子を持つ別のファイルが存在する場合、ファイルを無視するようにスクリプトを変更し始めました。つまり、アップロードはまだ完全には完了していません。
しかし、アップロードの最後に、すべてのパーツが終了すると、IN_MOVED_IN
通知がトリガーされ、スクリプトを必要なときに正確に実行できることに気付きました。
ファイルアップローダーの動作を知りたい場合は、これをincrontabに追加してください。
/your/directory/ IN_ALL_EVENTS echo "$$ $@ $# $% $&"
その後
tail -F /var/log/cron
トリガーされるすべてのイベントを監視して、どのイベントが最適かを見つけます。
幸運を!
転送の最後にダミーファイルを追加してみませんか?ダミーでIN_CLOSEまたはIN_CREATEイベントコードを使用できます。重要なのは、シーケンスの最後のファイルとして転送されるダミーです。
お役に立てば幸いです。