2016-11-02 5 views
0

私は以下のスクリプトファイルを持っています。実際にはJavaアプリケーションを実行し、コンソールログはログファイルにリダイレクトされます。シェルスクリプト - 手動でファイルを編集した後、ファイルにリダイレクトされない

$JAVA_CMD $APP_ENV $APP_MAIN_CLASS >>&! $LOGFILE & 

正常に動作します。私はプロセスが実行されているときに手動でファイルを編集しようとしました。しかし、問題は、ファイルを編集した後、アプリケーションで何らかの操作を行うと、既存のファイルにログが追加されなくなります。

なぜですか?そしてそれを解決する方法?

答えて

1

書き込み中のファイルは編集できません。ほとんどのエディタは、少なくとも一時的に別のiノードにファイルを移動してしまいますが、Javaプロセスではファイルのハンドルが存在しなくなり、現在は存在しなくなります。

ここでの基本的な概念は、ファイルが基本的に単方向シーケンスであることです。シーケンスの早いものが別のプロセスによって変更されている間にファイルに追加するだけでは、あまり定義されていません。

一般的な回避策は、ファイルを編集する前にコピーすることです。別のものは、ログファイルのために、ある種のログファイルローテーションメカニズムを実装することです(「ログを出して新しいものを起動してください」と言うことができます)が、単純なリダイレクトはログに書き込まれません。

関連する問題