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のようなサンプルスクリプトを見ると少し迷っています。
私の質問では、はこれを行うための簡単な方法ではありません私の場合ですか?私のデーモンはコマンドをすでに理解していて、デーモンが停止に応答しない場合を除いて、それ自身が何らかのアクションを担当する必要があります。
実際に、私はこのライブラリを構築する前に、Java Service Wrapper(と他のいくつかの選択肢)を見ました。しかし、私は彼らが私の味のために少しでも "重い"と感じました。これはかなりシンプルなもので、私はそれをそのままにしておきたかったのです。しかし、ヒントをありがとう! – lindsten