これを行う正しい方法は、ファイルへの書き込みを行うプロセスに、書き込みが完了したときにファイルの名前を変更するか、ファイルの名前を変更することです。それ以外のものは競合状態や許可問題になりがちです。
問題の事例のいくつかの特定の例:
- ファイルを移動するプロセスがlsof / fuser / etcとは異なるユーザーとして実行されている場合、情報は完全であるとは保証されません。
- 書き込みを行っているプロセスがシェルスクリプトの場合、ファイルを開くサブプロセスを起動したり、閉じたり、別のサブプロセスを起動したりすることができます。それ以上のサブプロセスが後でそれへの書き込みを開始する場合でも
他にも、もっと微妙な競合状態が存在するかもしれません - そして、それにもかかわらず、lsof、fuserなどはPOSIXツールではなく、どこでも利用できるわけではありません。
プロトコルの問題として、ファイルを書き込んでいるプロセスが、完了時にそれらを最終的な場所に移動することを要求します。それは唯一の安全で携帯可能な方法です。
編集:ファイルが任意のプロセス(それらを閉じて再び開くことがある)によってではなく、FTPサーバによって書かれていることが明らかにされています。この場合、 incron このディレクトリでファイルが閉じられたときはいつでも任意のスクリプトを実行するために使用できます。