我正在编写一个利用jsvc将Java服务作为守护程序启动的应用程序。我需要使用jsvc之类的东西,因为我的应用程序使用了1024以下的端口,但我真的很想不要以root用户身份运行它,以便创建的文件由另一个用户拥有。我还希望将依赖关系和配置保持在最低限度,以便所有客户端需要的是JVM和已安装的jsvc二进制文件。

但是,jsvc似乎有一个主要收获。它无法在给定的Unix操作系统上检测Java的主文件夹,这非常令人沮丧:

$ ./startup.sh
Cannot locate Java home

我至少可以通过手动设置JVM主目录来解决在Ubuntu上的问题:
jsvc ... -home /usr/lib/jvm/default-java/ ...

有什么方法可以通过Bash脚本动态确定Java主目录,以便我可以在大多数Unix/Linux上使用它吗?我可以在晚上睡得更好,做些类似的事情:
JAVA_HOME="$( ... )"

jsvc ... -home "$JAVA_HOME" ...

...而不是对每个单独的操作系统进行硬编码。在给定java二进制文件的情况下,有没有办法找到其JVM/JRE的主目录?

最佳答案

不知道这是否适用于* nixes,但是找到了以下解决方案:

JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )"

我已经在Ubuntu上对其进行了测试,并且可以运行,但是不适用于OSX。

09-27 20:52