4

ftpプロキシが中央サーバーにログを記録するcronジョブがいくつかあります。これらのファイルはかなり大きく、転送に時間がかかる場合があります。このプロジェクトの要件の一部は、これらの転送の成功または失敗をログに記録するログメカニズムを提供することです。これは簡単です。

私の質問は、ファイルが現在書き込まれているかどうかを確認する方法はありますか?私の最初の解決策は、指定された時間枠内にファイルサイズを2回チェックし、ファイルサイズをチェックすることでした。しかし、同僚は、Pythonを介してEXT3ファイルシステムにフックし、属性をチェックして、ファイルが現在追加されているかどうかを確認できる可能性があると述べました。私のGoogle-Fuは空になりました。

ファイルの状態をチェックできるEXT3などのモジュールはありますか?サーバーは、EXT3ファイルシステムを備えたFedoraCore9を実行しています。

4

2 に答える 2

7

ext3固有のフックは必要ありません。ただチェックするかlsof、もっと正確に言えば、/proc/<pid>/fd/*そして/proc/<pid>/fdinfo/*lsofそれが情報を得るところです、AFAICT)。そこで、ファイルが開いているかどうか、書き込み可能かどうか、および「カーソル」の位置を確認できます。

それは全体像ではありません。ただし、ほとんどの書き込みはバッファリングされ、カーネルはより大きなデータチャンクしか認識しないため、書き込みプロセスでstdlibによってprocesspaceでこれ以上実行されます。したがって、「ext3対応」モニターもそれを取得しません。

于 2009-07-02T16:45:20.067 に答える
1

必要なものを直接チェックするためのext3フックはありません。

  • Fuser linuxコマンドのソースコードを調べて、ファイルを所有しているプロセスを見つける部分を複製し、そのリソースを監視できると思います。誰もファイルを開いていない場合は、転送が完了しています。

別のアプローチ:

  • cronジョブは、それらが終了したことを通知する必要があります。

ファイルを転送するcronジョブには、ファイル名が転送された後に空のfilename.finishedを書き込むだけです。別のアプローチは、それらを一時的なファイル名(filename.partなど)に転送してから、ファイル名に名前を変更することです。名前の変更はアトミックです。どちらの場合も、filenameまたはfilename.finishedが存在するまで繰り返しチェックします。

于 2009-07-02T16:55:34.817 に答える