iowaitnotify close_waitはファイルが完全に記録されているかどうかを確認しますか?

iowaitnotify close_waitはファイルが完全に記録されているかどうかを確認しますか?

close_writeionotifywaitイベントがファイルが完全に記録されることを保証するかどうかを明確にしてください。

ファイル転送プログラムが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これで十分です。ファイルが閉じられると、後続の読み取りによってすべてのデータがファイルに書き込まれ、ファイルを変更した元のプロセスはそれ以上できません(ファイルを再開せずに)。これいいえつまり、すべてのデータがディスク上にあり、まだキャッシュ内にある可能性がありますが、それを読み取るプロセスにはすべてのデータが表示されます。

おすすめ記事