4

フォルダーを継続的にポーリングしているアプリケーションを取得しました。いずれかのファイルがフォルダーに ftp されると、アプリケーションはこのファイルを処理のために別のフォルダーに移動する必要があります。

ここでは、ftp が完了しているかどうかを確認するオプションはありません。

テクニカル フォーラムでは、1 つのコマンド「lsof」が提案されています。ファイルの状態を示すファイルの説明列を取得しました。

これは無料の bsd コマンドであり、古いバージョンの Linux には存在しないため、このコマンドの使用法を明確にしたいと思います。

ファイル検証の経験を教えてください。他に利用可能な代替ソリューションはありますか?

また、このユーティリティを使用するリスクはありますか?

あらかじめご了承ください。

ありがとう、マシュー・リジュ

4

3 に答える 3

4

これまで、さまざまな方法でこれを行ってきました。

方法 1:

ファイルを送信するプロセスを制御できる場合は、ファイル自体に続いてセンチネル ファイルを送信します。たとえば、実際のファイルの"contracts.doc"後に 1 バイトの"contracts.doc.sentinel".

次に、リスナー プロセスにセンチネル ファイルを監視させます。いずれかが作成されたら、同等のデータ ファイルを処理してから、両方を削除する必要があります。

1 日以上前のデータ ファイルで、対応するセンチネル ファイルがない場合は、それを削除してください。これは送信の失敗です。

方法 2:

ファイル自体 (具体的には最終変更日時) に注意してください。N過去の変更時間が分以上経過しているファイルのみを処理します。これにより、ファイル処理の待ち時間が長くなりますが、通常、ファイルが 5 分間 (たとえば) 書き込まれていなければ、書き込みは完了していると確信できます。

結論:

これらの方法は両方とも、過去に成功裏に使用されています。私は最初のものを好みますが、ファイルを送信するプロセスを変更することが許可されていなかったときに、2 番目のものを使用する必要がありました。

前者の利点は、sentinel ファイルが表示されたときにファイルの準備ができていることがわかることです。lsof(どのプロセスでも開かれていないファイルを処理の準備ができているものとして扱っていると仮定しています) とタイムスタンプの両方を使用すると、FTP が途中でクラッシュし、ファイルの半分を処理している可能性があります。

于 2009-07-31T09:14:59.893 に答える