Java服务包装器和其他应用程序命令行参数

时间:2010-06-14 16:05:34

标签: java java-service-wrapper

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

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

./ myapp start Parameter1 parameter2

并将这些附加参数传递到我的应用程序中。任何想法如何做到这一点?我发现谷歌搜索和查看文档只是拉起如何使用命令行参数来设置java服务包装器。我很难找到关于将命令行参数传递给应用程序的任何内容,除非在你的wrapper.conf文件中对它们进行硬编码。

现在我觉得我的选择是获取额外的命令行参数,将它们设置为环境变量并在wrapper.conf中进行硬编码。我宁愿不去那条路,也希望我忽视了一些事情。

3 个答案:

答案 0 :(得分: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'中,'start'(和'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 ...

希望这会帮助你。

欢呼声, 基督教

答案 1 :(得分:1)

杰克, 快速跟进。在Java Service Wrapper的shell脚本的3.5.5版本中,我们在顶部添加了一个新的PASS_THROUGH选项,现在可以将命令行参数传递给JVM,开箱即用。

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

干杯, 雷夫

答案 2 :(得分:0)

您可以发布“myapp”脚本的示例吗?不是整个事情,但是看看启动java过程的部分是什么样子会很有用。

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