5

デーモンインターフェイスを使用して、ApacheCommonsDaemonを使用してアプリケーションをデーモン化しようとしています。Javaアプリケーション自体は、スタウトに書き込むだけでは何もしていません。

jsvcをコンパイルしました:http://people.apache.org/~mturk/daemon-1.0.10/

(最新バージョンも試してみました:http://people.apache.org/~mturk/daemon-1.0.12/

そして、この基本的なスクリプトを書きました。

do_exec()
{
    $EXEC \
        -home "$JAVA_HOME" \
        -cp $CLASS_PATH \
        -outfile $LOG_OUT \
        -errfile $LOG_ERR \
        -pidfile $PID \
        $1 \
        $MAIN_CLASS
    echo "result: $?"
}

case "$1" in
    start)
            do_exec
            ;;
    stop)
            do_exec "-stop"
            ;;
    restart)
            do_exec "-stop"
            do_exec
            ;;
    *)
            echo "usage: daemon {start|stop|restart}" >&2
            exit 3
            ;;
esac

デーモンが実行されていないときにデーモンを停止しようとすると、応答コード255が返されます。これは素晴らしいことです。

しかし、デーモンがすでに実行されているときにデーモンを起動しようとすると、応答コード0が返されます。しかし、errfileで次のことがわかります。

Still running according to PID file /tmp/deamon.pid, PID is 1799
Service exit with a return value of 122

start()メソッドで例外をスローしてデーモンを起動しようとした場合も同じです。応答コードは0です。しかしerrfile:

 Service exit with a return value of 5

私がここで欠けているものは何ですか?デーモンが起動しなかった、またはデーモンがすでに実行されていることをユーザー統計に通知するにはどうすればよいですか?

4

1 に答える 1

7

JSVCの仕組みを注意深く読んだ後:http://commons.apache.org/daemon/jsvc.html

何が間違っているのかがわかりました。待機パラメータを使用する必要があります

-waitパラメーターを使用すると、ランチャープロセスは、コントローラーが「準備ができました」と言うまで待機します。それ以外の場合は、コントローラープロセスの作成後に戻ります。

于 2013-01-21T18:19:12.700 に答える