2011-03-08 19 views
1

Javaでサービス/デーモンを作成するための小さなライブラリを作成しました。アイデアは簡単です。アプリケーションを起動するときには、コマンドとポート番号を渡します。コマンドが開始コマンドの場合、アプリケーションの新しいインスタンスが指定されたポートで開始されます。それ以外の場合は、そのポートで実行されている可能性のあるインスタンスにコマンドが送信されます。Javaデーモン用の簡単なinitスクリプト?

要するに、ライブラリにはデーモンコントローラスレッドを開始するdaemonizeメソッドが用意されています。ソケットを使用してアプリケーションを(おそらく既に考え出したように)自分自身のインスタンスと通信させます。

明確にするために、ここにあなたがそれを使用する方法の例です:

public class MyApp extends Daemon 
{ 
    public static void main(String[] args) 
    { 
     if (daemonize(MyApp.class, args)) 
     { 
      // normal main body 
      startMyServerOrWhatever(); 
     } 
     else 
     { 
      // failed to start or send command to daemon 
      // probably wrong syntax or unknown command 
      printUsageInfoAndExit(); 
     } 
    } 

    @Command(start = true) 
    public static int start() 
    { 
     // executed on "start" command, e.g. java -jar MyApp.jar start 8899 
     doSomeInitializing(); 
     return 0; // return 0 or void to detach from console 
    } 

    @Command 
    public static void mycmd() 
    { 
     // executed on "mycmd" command, i.e. java -jar MyApp.jar mycmd 8899 
     doSomethingCool(); 
    } 

    @Command(stop = true) 
    public static int stop() 
    { 
     // executed on "stop" command, i.e. java -jar MyApp.jar stop 8899 
     doSomeCleanup(); 
     return 0; // used as application exit code 
    } 
} 

ライブラリは本当によく働くと私はLinuxサーバ上で実行されますデーモンのカップルを作成するためにそれを使用しました。今欠けているのは、管理者がサーバ上の他のデーモン(例えば起動時に起動)を制御するような、これらのデーモンを制御させるスクリプトです。

残念ながら、私の* nixスキルは、特にスクリプティングに関してはトップレベルではありません。私はBSDスタイルのinitプロシージャ(rc.d)を基本的に理解していますが、this oneのようなサンプルスクリプトを見ると少し迷っています。

私の質問では、はこれを行うための簡単な方法ではありません私の場合ですか?私のデーモンはコマンドをすでに理解していて、デーモンが停止に応答しない場合を除いて、それ自身が何らかのアクションを担当する必要があります。

答えて

1

あなたは本当にtanukiソフトウェアによってJavaサービスラッパーを見てください。
http://wrapper.tanukisoftware.com/

私が彼らのアプローチについて気に入っているのは、単一のツールと共通のスクリプトでデーモンとWindowsのサービスプロセスを標準化している点です。

私は、このツールをネクサス、サービスマンなどのいくつかのハイプロファイルプロジェクトで使い慣れていることに気付きました。

デーモンプロセスを管理するためにJava Service Wrapperを採用したプロジェクトに遭遇したとき、コマンドセットと設定はすでにわかっているので、学習の時間が短縮されます。

おそらく、あなたはこの既存のフレームワークにあなたのソケットコントローラ機構を適合させることができます。

+0

実際に、私はこのライブラリを構築する前に、Java Service Wrapper(と他のいくつかの選択肢)を見ました。しかし、私は彼らが私の味のために少しでも "重い"と感じました。これはかなりシンプルなもので、私はそれをそのままにしておきたかったのです。しかし、ヒントをありがとう! – lindsten

0

私はSSHを介して私たちのJavaアプリケーションを起動するために、一度daemon scripts書いた簡単な方法

ありません。彼らは最小限に抑えられています。強制終了やrc.d/SMFの統合はなく、TERMシグナルを使用するデーモンの起動とシャットダウンだけです。

関連する問題