8

私の主な分野は .Net ですが、最近は Java と関係があります。Java でシェル ユーティリティを作成する必要があります。シェル ユーティリティはバックグラウンドで実行され、指定された期間の後にいくつかのデータベース レコードを読み取り、さらに処理を行います。スケジューラの一種です。今、私はいくつかの懸念を持っています:

これをサービスとして機能させる方法。シェルスクリプトを介して実行したいのですが、ユーティリティが実行を開始するはずです。もちろん、コントロールは呼び出し元のスクリプトに戻る必要があります。

第二に、最終的にはこのプロセスの実行を停止したい場合があります。これを達成する方法は?

これらは基本的な質問であることは理解していますが、どこから始めればよいのか、どのオプションが最適なのかまったくわかりません。

ヘルプ/アドバイスをお願いします。

4

5 に答える 5

3

スケジューラまたはサービスを使用してプログラムを実行します。ただし、bat ファイルを使用してこれをプログラムで実行する場合は、以下に考えられるアプローチの概要を示します。

Java プログラムでは、プログラムによって PID を取得し、それをファイルに書き込むことができます。

public static void writePID(String fileLocation) throws IOException
{
    // Use the engine management bean in java to find out the pid
    // and to write to a file
    if (fileLocation.length() == 0)
    {
        fileLocation = DEFAULT_PID_FILE;
    }       
    String pid = ManagementFactory.getRuntimeMXBean().getName();
    if (pid.indexOf("@") != -1) 
    {
        pid = pid.substring(0, pid.indexOf("@"));
    }                                               
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileLocation));
    writer.write(pid);
    writer.newLine();
    writer.flush();
    writer.close();                     
}

その後、Windows で実行中のプログラムを強制終了する stop .bat ファイルを作成できます。次のようなことができます:

setlocal
IF EXIST app.pid FOR /F %%i in ('type app.pid') do TASKKILL /F /PID %%i   
IF EXIST app.pid DEL app.pid
endlocal

もちろん、app.pid は上記の Java メソッドによって書き込まれたファイルです。

Java プログラムを起動し、終了時に制御を戻すスクリプトをどのように作成できるかわかりません。誰かがそれに対する解決策を持っているかどうかを知りたいです。

于 2010-06-10T14:52:35.987 に答える
3

Linux/Unix ボックスで Java プログラムをプレイしていると仮定します。アプリケーションをデーモンとして実行するには、試すことができます

nohup java YourJavaClass &

アプリケーションを停止するには、次のいずれかを実行できます。

kill [psIdofYourApplication]

また

fg [your application job Id]
Ctrl-C

アプリケーションが「kill/stop」シグナルを受信した後に後処理を行いたい場合。addShutdownHook(スレッドフック)をチェックしてください

または、sun.misc.SignalHandler

于 2010-06-10T15:33:01.257 に答える
1

プラットフォームを指定していません。Windowsの場合は、ServiceControlとの統合を検討してWindowsサービスを作成する必要があります。 http://en.wikipedia.org/wiki/Windows_service。サービスフックを実装すると、サービス制御GUIを使用するかnet stop MyService、コマンドラインの構文を使用してサービスを開始および停止できます。

于 2010-06-10T12:15:06.013 に答える
1
ps ux

見るpid

kill pid

または、アプリケーションに通知する停止スクリプトを提供することをお勧めします。System.exit(0)

于 2010-06-10T12:08:13.730 に答える
0

私が理解しているように、次のようなものが必要です。

if ( System.in.avaliable() > 0 ) {
  in = new BufferedReader( new InputStreamReader( System.in );
  String InLine = in.readLine();
  ...
}

私は正しいですか?

于 2010-06-10T16:49:46.793 に答える