0

Rails アプリケーションのリクエストの一部で、ある場所から別の場所にディレクトリをコピーします。これは作業領域のようなものだと考えてください。このコピー操作により、"Errno::ETXTBSY" 例外がスローされることがあります。それを引き起こしているケースを特定できないようです。ケースを検出するか、完全に回避するためのヒントはありますか?

宛先ディレクトリに一意の名前が付けられていることを確認したので、2 つのプロセスが同じ場所に書き込もうとすることはありません。それを超えて、私はアイデアがありません。

4

1 に答える 1

2

ETXTBSY は、現在プログラムとして実行されているファイルを書き込み用に開こうとしている、または現在書き込み用に開かれているファイルを実行しようとしていることを意味します。ファイルを実行しているのではなくコピーしていると言っているので、後者ではなく前者である可能性が高いようです。

一意の新しい宛先をターゲットにしていると言いますが、それは完全に真実ではなく、実際には既存のディレクトリをターゲットにしており、上書きしようとしているファイルの 1 つが実行中の実行可能なテキスト セグメントとして現在開かれていると思います。処理する。

コードを投稿していないため、具体的にコメントするのは困難です。どのファイルが処理されているか、具体的には、例外をスローするソースと宛先のパスを正確に把握できるように、十分なログを追加することをお勧めします。次に、lsofどのプロセスがそのファイルを開いている可能性があるかを確認するために使用できます。

現在開いている実行可能ファイルを上書きする場合に問題を回避する 1 つの方法は、最初unlinkにターゲット ファイルを上書きすることです。実行中のプロセスは古い inode をマッピングしたままで、削除されたファイルを使用して楽しく進行しますが、書き込み用に開くと、競合しない新しいファイルが作成されます。

于 2013-03-20T02:48:06.800 に答える