3

私の Perl スクリプトは、File::Copy の移動機能を使用して、NFS マウントされたファイルシステムにファイルを移動しています。最近、一部のファイルがエラーを返し、スクリプトが「move returned 0, A file or directory in the path name does not exist.」というメッセージを出力しました。(move は成功すると 1 を返し、エラーの場合は 0 を返します。エラー メッセージは $! からのものです)

本当に奇妙なことは、ファイルを処理するシステムが、失敗したファイルを正常に処理したと報告したことです! 書き込みが成功したときにエラー メッセージが表示されるのを見たことがないので、NFS と関係があるのではないかと思います。28 個のファイルを移動する実行で、最初の 24 個が失敗し、最後の 4 個が成功したのはおかしいと思いました。スクリプトは数か月間エラーなしで実行されており、現在、この問題は 2 週間で 2 回発生しています。

ホストは AIX で実行されていますが、違いがあるとは思えません。

4

1 に答える 1

0

Perl ではなく、NFS の問題だと思います。NFS は、場合によっては非常に奇妙なものになる可能性があります。

書き込まれたファイルを stat/read する必要があり、報告されたエラーに依存しないでください。

File::Copy::Reliable モジュールは同じエラー処理を使用し、同じエラーで失敗します。

フォームのソース:

copy( $source, $destination )
    || croak("copy_reliable($source, $destination) failed: $!");

コピーを eval ブロッ​​クに入れ、宛先でファイルの読み取り/統計を試みるだけです。

本当に用心深い場合は、両方のファイルで md5/sha1 ハッシュを使用して、それらが同じであることを確認できます。

よろしく、

于 2012-06-13T07:09:51.270 に答える