5

現在、Java サービス ラッパーを使用して、開発した Java アプリケーションをラップしています。Java サービス ラッパーを介してアプリケーションに追加のコマンド ライン パラメータを渡す機能が必要です。

私のアプリが myapp と呼ばれているふりをして、起動するために実行するスクリプトが myapp と呼ばれるように Java サービス ラッパーをセットアップしました。私はこのようなことをしたいと思います:

./myapp start パラメーター 1 パラメーター 2

これらの追加パラメータをアプリケーションに渡します。これを行う方法はありますか?グーグルでドキュメンテーションを見ても、コマンドライン引数を使用してJavaサービスラッパーをセットアップする方法を引き出すだけであることがわかりました。コマンド ライン引数をアプリケーションに渡す方法については、wrapper.conf ファイルにハード コーディングすること以外はわかりませんでした。

現時点では、追加のコマンド ライン パラメータを取得して環境変数に設定し、それらを wrapper.conf にハード コードするという選択肢があると思います。私はその道をたどりたくないのですが、何かを見落としていることを願っています。

4

3 に答える 3

4

ラッパーの 3.5.2 リリースでは、"--" を使用して Java アプリケーションのパラメーターの前に置くことで、あなたが求めていることを達成する可能性を追加しました: https://sourceforge.net/tracker/?func=detail&aid =3017567&group_id=39428&aid=425190

これは基本的に、ラッパーのバイナリを直接呼び出す場合に機能しますが、シェル スクリプトの場合は、少し変更することで同じことを簡単に実現できます。

スクリプトを開き、console()、start() (オプションで launchdinternally()) で command_line を次のように設定します。

    COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $LOCKPROP $@"

末尾の $@ に注意してください。

ここで、スクリプトの最後に移動し、呼び出す関数 (コンソール、開始、停止、再起動など) を決定します。

「コンソール」、「開始」(および「launchdinternal」) でシフトを設定し、コマンドラインから関数にパラメーターを渡します。

'console')
    checkUser touchlock $1
    shift
    console $@
    ;;

'start')
    if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
        macosxstart
    else
        checkUser touchlock $1
        shift
        start $@
    fi
    ;;

..「launchdinternal」)

    shift
    launchdinternal $@
    ;;

その後、次のようにスクリプトを呼び出すことができます。

./script start|console -- para1 para2 ...

これがあなたを助けることを願っています。

乾杯、クリスチャン

于 2010-08-31T06:47:30.800 に答える
1

ジェイク、迅速なフォローアップ。Java Service Wrapper のシェル スクリプトのバージョン 3.5.5 では、上部に新しい PASS_THROUGH オプションを追加しました。これにより、コマンド ライン引数をそのまま JVM に渡すことができるようになりました。

このスクリプトは、Christian 氏が 8 月に言及した「--」コマンド ライン パラメータを利用しています。

乾杯、レイフ

于 2010-12-11T17:13:12.300 に答える
0

「myapp」スクリプトがどのように見えるかの例を投稿できますか? すべてではありませんが、javaプロセスを起動する部分がどのように見えるかを確認すると便利です。

達成したいことは、スクリプトによってプロセスに$@渡されることを確認するのと同じくらい簡単でなければなりません。javaBash では$@、スクリプトに渡されるすべての引数を含む配列です。Java サービス ラッパーによって生成されたラッパーが、引数の 1 つとして "start" を渡す必要がある場合、最初の引数以外のすべての引数をjavaプロセスに渡すために、少しスクリプトを追加する必要がある場合があります。

于 2010-06-14T16:18:19.513 に答える