1

シェルスクリプトによって更新されるログファイルがあります。このシェルスクリプトにはいくつかの操作があり、各操作の後にファイルを更新して、操作が終了したことを示します。ここで、サーブレットからこのファイルを「リッスン」し、ロギングが発生するのと同じ方法でエンドユーザーに応答を送信する必要があります(つまり、操作Aが終了し、操作Bが終了します)。ここで、サーブレットとシェルスクリプトの両方が同時にファイルを開こうとすると、エラーが発生することは間違いありません。Javaでは、IOExceptionとして処理し、ファイルの読み取りを続行できると思います。これにより、シェルスクリプトがファイルを更新していないときに機能します。これをシェルスクリプトでどのように処理する必要がありますか?Javaで読み取り専用モードでファイルを開くと役に立ちますか?また、シェルスクリプトは書き込みのみを行い、読み取りは行わず、サーブレットは読み取りのみを行い、読み取りを行わないことに注意してください。

また、このワークフローを実装するためのより良い方法についての提案を歓迎します。

4

2 に答える 2

2

Java 7を使用していますか?もしそうなら、多分新しいウォッチャーサービスがあなたのために働くでしょう。私は個人的には使用していませんが、ファイル/フォルダーが変更されたときにコードで通知を受け取るという考え方です。これにより、単にファイルを繰り返しポーリングするよりも、コードがクリーンになる可能性があります。

http://docs.oracle.com/javase/7/docs/api/java/nio/file/WatchService.html

于 2012-07-09T04:32:08.020 に答える
0

WatchServiceは使用できないため、を使用してファイルの最終変更をポーリングできますfile.lastModified()

これを定期的に行うと、結果を比較でき、結果が変更された場合は、シェルスクリプトによってファイルが変更されます。ポーリングするたびに新しいFileオブジェクトを作成する必要があるかもしれませんが、ファイルは読み取り用に開かれていないため、アクセスの問題は発生しません。

ただし、ファイルを開いてその内容を比較しても、シェルが排他的アクセスでファイルを開かない限り、アクセスの問題は発生しません。

于 2012-07-09T05:03:45.373 に答える