私は、Dazzle と呼ばれる USPS 配送パッケージと連動するシステムを開発しています。このシステムの一部には、タブ区切りの値ファイルを取得し、それらを Dazzle が認識する XML に変換し、ラベル生成のために Dazzle に渡すことを目的とする監視デーモンが含まれています。そして、この部分はうまく機能します。ただし、私がやりたいことは、Dazzle が生成する出力ファイルを解析してデータベースにインポートすることです。
ここで、Dazzle は Windows 上で動作することに注意してください。私の監視デーモンは Perl で書かれており、Linux で動作します。私の Linux システムには、Samba 経由でマウントされた Dazzle の入力および出力ディレクトリがあります。
Dazzle が出力ファイルの書き込みを開始してから完了するまでには、かなりの遅延があります。私が知りたいのは、Dazzle が出力ファイルの書き込みを完了するのをどのように待つことができるかということです。ファイルを開いて実行しようとしましflock($fh, LOCK_SH)
たが、うまくいかなかったようです。
編集:以下の「mobrule」のコメントに基づいたアイデアがあります。Dazzle は出力ファイルを XML で書き込みます。出荷の各パッケージはタグで囲まれ、ドキュメント全体がタグで囲まれています。そのため、ファイルが完了する前に読み取りを開始した場合は、適切な終了タグが表示されるのを待ってからアクションを実行できます。
また、私が現在行っていることについても言及する必要があります。出力 XML ファイルが作成されたことを検出すると、それを解析しようとします。その解析が失敗した場合は、スリープして再試行します。それが失敗した場合、私は 2 倍長く寝てから、もう一度やり直します。これは、64 秒のタイムアウトでのテストでかなりうまく機能しました。