0

監視スクリプトで問題に直面しています。

プログラムの流れは、

  1. お客様がファイル (.csv 形式) を「ソース」ディレクトリに ftp/sftp します。
  2. Bash スクリプトは、完成した .csv ファイルの名前を .aaa ファイルに変更します
  3. 別の Bash スクリプトは、「.aaa」ファイルを「destination」ディレクトリに移動し、ファイルの名前を「.csv」に戻します。
  4. CAMEL は「宛先」ディレクトリを監視しています。ファイルが「宛先」フォルダに来て、拡張子が「.aaa」と等しくない場合、ファイルの処理が開始されます。

ここでは、ステップ 3 が失敗しています。Bash スクリプトはファイルを正常に移動します。しかし、ファイルの名前を「.aaa」から「.csv」に変更している間、CAMEL はファイルを取得して処理を開始します。CAMEL は「フッターが存在しません」というエラーで失敗します。これは、「mv」コマンドが完了しておらず、「mv」が完了する前に CAMEL が処理されたためです。したがって、不完全なファイルを処理しました。

スクリプトを使用しているため、コマンドを使用する際の柔軟性はほとんどありません。Linux の「mv」コマンドを使用してファイルの名前を変更しています。

名前の変更中にスクリプトでファイルをロックして、CAMEL がファイルにアクセスできないようにする方法はありますか?

または、このシナリオを処理するより良い方法はありますか?

事前に助けに感謝します。

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

4

3 に答える 3

1

ステップ3はどうする?

mv foo.aaa dest/foo.csv

また

mv foo.aaa dest/foo.aaa
mv dest/foo.aaa dest/foo.csv

後者はアトミックである必要があると思いますが、元と宛先が異なるパーティション/ファイルシステムにある場合、最初はコピーです。

于 2009-12-08T09:50:53.430 に答える
0

CAMEL が何であるかはわかりませんが、ファイル システムでロックのないキュー メカニズムを探していると思います。Maildir (qmail の一部) は、このようなロックフリーのメール配信キューを実装しています。

inotifyの全体を見ることもできます。

OS とパーティション レイアウトによっては、ファイルを cp、mv、または ln する必要があります。

于 2009-12-08T10:10:21.407 に答える
0

良いヒントは、使用しているさまざまな製品のバージョンを常に記入することです。

とにかく、Camel 2.x には、このような問題を解決するために選択できる 5 つほどの異なる readlock オプションがあります。また、特別な .DONE ファイルがある場合にのみファイルの読み取りを開始する必要があるなどの特別なサポートがある場合は、独自のものを実装できます。

http://camel.apache.org/file2.html

于 2010-01-29T17:15:38.043 に答える