close_write
ionotifywaitイベントがファイルが完全に記録されることを保証するかどうかを明確にしてください。
ファイル転送プログラムがXファイルをリモートサーバーZに送信し、ファイル転送が完了したら、ZのXを監視してXを移動する必要がある状況です。いつ送信が行われたかわからないので、監視が必要です。
bashスクリプトinotifywaitは、続行する前にファイルが完全に書き込まれるのを待ちます。close_write
ファイルが完全に作成されたことを示します。
これら2つのファイルがあるかどうかを確認する最良の方法は何ですか?完全に書かれた
pacholik close_writeが指摘したように、イベントオプションだけで十分です。
inotifywait -m -e close_write $1 | while read line
ただし、マニュアルページには次のように記載されています。必ずしもファイルが記録されたというわけではありません。。
inotifywatch(1) - Linux のマニュアルページ
書き込み用に閉じる
監視されたファイルまたは監視されたディレクトリ内のファイルは、書き込み可能モードで開かれて閉じられます。これは実際に必ずしもファイルが作成されたという意味ではありません。。
ベストアンサー1
close_write
最後の段落では、イベントがファイル記述子が閉じて書き込み可能モードで開かれたことを示すだけであり、オープンイベントとクローズイベントの間に発生したものは何も説明しないことを強調します。だから、プロセスが実行中です。
fd = open("/path/to/foo", O_RDWR);
close(fd);
イベントclose_write
がトリガーされます。
デフォルトでは、ファイルが変更された時期と変更が完了した時期を知りたい場合は、およびmodify
/close_write
またはclose
イベントを監視する必要があります。
あなたのシナリオではclose_write
これで十分です。ファイルが閉じられると、後続の読み取りによってすべてのデータがファイルに書き込まれ、ファイルを変更した元のプロセスはそれ以上できません(ファイルを再開せずに)。これいいえつまり、すべてのデータがディスク上にあり、まだキャッシュ内にある可能性がありますが、それを読み取るプロセスにはすべてのデータが表示されます。