2010-06-14 28 views
4

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

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

./myapp启动参数1参数

,并将这些额外的参数得到传递给我的应用程序。任何想法如何做到这一点?我发现使用googling并查看文档只是拉起如何使用命令行参数来设置Java服务包装。我很难找到关于将命令行参数传递给应用程序的任何信息,除非将它们硬编码到wrapper.conf文件中。

现在我觉得我的选择是采取额外的命令行参数,将它们设置为环境变量,并将这些参数硬编码到wrapper.conf中。我宁愿不走那条路,但希望我忽略了一些东西。

回答

0

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

你想完成的工作应该与确保[email protected]被脚本传递到java过程一样简单。在Bash中,[email protected]是一个包含传递给脚本的所有参数的数组。如果由java服务包装器生成的包装器需要您将“start”作为参数之一传入,那么您可能需要添加一些脚本来将除第一个之外的所有参数传递给java进程。

4
在3.5.2版本包装的

,我们增加了一个可能性,以达到你所要求的,通过使用“ - ”来参数先于Java应用程序: https://sourceforge.net/tracker/?func=detail&aid=3017567&group_id=39428&atid=425190

,这是基本的工作直接调用包装的二进制文件,但对于shell脚本,您可以通过修改它轻松实现:

打开脚本并在控制台(),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 [email protected]" 

注意最后的$ @。

现在,转到脚本,它决定功能,它应该叫什么(控制台,启动,停止,重新启动等)

相当年底在“控制台”,“开始”(和'launchdinternal')设置的移位,并从命令行越过参数给该函数:

'console') 
    checkUser touchlock $1 
    shift 
    console [email protected] 
    ;; 

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

.. 'launchdinternal')之后

shift 
    launchdinternal [email protected] 
    ;; 

,你可以这样调用脚本:

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

希望这可以帮助你。

欢呼声, 基督教

1

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

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

干杯, 莱夫

相关问题