解決方法がわからない問題があります。1つのシングルスレッドのエグゼキュータサービスを使用してJavaポーリングアプリを作成しました。そのサービスは、いくつかのファイル操作とデータベースの相互作用を行います。
コマンドpromt/実行可能jarからjava-jarmyapp.jarを使用して実行すると、が実行されます。いつでも止めることができます。
次に、ユーザー用に2つのスクリプトを作成する必要があります(Tomcatのように)。1つはアプリを起動するためのもので、もう1つは停止するためのものです。
ただし、ユーザーがスクリプトを実行して停止すると、エグゼキューターサービスのすべてのジョブ/スレッドが終了するまでプロセスが強制終了されないという考えがあります。実行中の状態でプロセスを強制終了すると、ジョブを実行しているシステムが停止する可能性があるため(たとえば、ファイルの移動中)、一貫性のない状態になる可能性があります。
問題は、シェルスクリプトからExecutorServiceの結果にアクセスできないことです。
このアプリを実行し、動作を制御およびアクセスするための2つのスクリプトを作成するにはどうすればよいですか。?
編集:
myapp.jarは定期的なエグゼキュータサービスを実行します。プロセスを強制終了するのではなく、エグゼキュータサービスがタスクを実行していない後にのみ停止できるようにする停止スクリプトを作成する必要があります。なぜなら、操作中にプロセスを強制終了すると、システムの一貫性が失われるからです。私のシステムはファイルを読み取り、それらを別のディレクトリに移動します。途中で強制終了すると、処理されるファイルと処理されないファイルがあります。ユーザーがUNIXシステムから停止スクリプトを実行した場合に、スクリプトがプロセスを強制終了しないか、ジョブが終了するまで待機するソリューションが必要です。