5

我目前正在使用java 服务包装器来包装我开发的 java 应用程序。我需要能够通过 java 服务包装器将其他命令行参数传递给我的应用程序。

假设我的应用程序称为 myapp,并且我已经设置了 java 服务包装器,以便我运行启动的脚本称为 myapp。我希望能够做这样的事情:

./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&atid=425190

这基本上适用于直接调用包装器的二进制文件,但是对于 shell 脚本,您可以通过稍微修改它来轻松实现相同的目的:

打开脚本并在 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 $@"

注意最后的 $@ 。

现在,转到脚本的最后,它决定应该调用什么函数(控制台、启动、停止、重新启动等)

在“控制台”、“开始”(和“启动内部”)中设置一个班次并将参数从命令行传递给函数:

'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 的 shell 脚本 3.5.5 版本中,我们在顶部添加了一个新的 PASS_THROUGH 选项,现在它可以立即将命令行参数传递给 JVM。

该脚本使用了 Christian 在 8 月份提到的“--”命令行参数。

干杯,莱夫

于 2010-12-11T17:13:12.300 回答
0

你能发布一个“myapp”脚本的例子吗?java不是全部,但看看启动流程的部分是什么样子会很有用。

您想要完成的事情应该很简单,就像确保脚本$@将其传递到java进程中一样。在 Bash 中,$@是一个数组,其中包含传递给脚本的所有参数。如果 java 服务包装器生成的包装器需要您将“start”作为参数之一传递,那么您可能需要添加一些脚本来将所有参数传递给java进程,但第一个参数除外。

于 2010-06-14T16:18:19.513 回答