我目前正在使用 java service wrapper包装我开发的 Java 应用程序。我需要能够通过 Java 服务包装器将额外的命令行参数传递到我的应用程序。
假设我的应用名为 myapp,并且我已经设置了 java 服务包装器,以便我运行以启动的脚本名为 myapp。我希望能够做这样的事情:
./myapp start Parameter1 parameter2
并将这些附加参数传递到我的应用程序中。任何想法如何做到这一点?我发现谷歌搜索和查看文档只是提取如何使用命令行参数来设置 java 服务包装器。除了将它们硬编码在您的 wrapper.conf 文件中之外,我很难找到任何有关将命令行参数传递给您的应用程序的信息。
现在我觉得我的选择是采用额外的命令行参数,将它们设置为环境变量并将这些参数硬编码到 wrapper.conf 中。不过,我不想走那条路,希望我忽略了一些事情。
最佳答案
在包装器的 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”)中设置一个 shift 并将参数从命令行传递给函数:
'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
;;
.. '启动内部')
shift
launchdinternal $@
;;
之后,你可以这样调用脚本:
./script start|console -- para1 para2 ...
希望这对你有帮助。
干杯, 基督徒
关于Java 服务包装器和附加的应用程序命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038763/