jscv:找不到JVM库文件

too*_*oom 5 jvm daemon jsvc

当我尝试启动演示jsvc实现时,我得到jsvc的以下错误输出:

jsvc -cp ApacheDeamonDemo.jar -pidfile /mypath/pid.txt -outfile /mypath/log.txt -errfile /mypath/err.log net.example.deamon.DemoDeamon
Run Code Online (Sandbox Code Playgroud)

我得到以下错误输出:

Cannot find any VM in Java Home /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
Cannot locate JVM library file
Service exit with a return value of 1
Run Code Online (Sandbox Code Playgroud)

实际上道路是正确的.因此我不明白为什么jsvc告诉我这个.我正在使用mac.

Jos*_*vis 12

差不多五年后,所以可能为时已晚,无法帮助最初的提问者,但是今天我在尝试使用 open-jdk-11 为 AMD64 运行 jsvc 时遇到了同样的问题,所以这可能会在以后对某人有所帮助。

为了诊断这个问题,我用 --debug 标志运行了 jsvc,这告诉我它在试图找到 libjvm.so 时卡住了。我find /usr/lib/jvm/java-11-openjdk-amd64 -name libjvm.so在 /usr/lib/jvm/java-11-openjdk-amd64/lib/server/libjvm.so运行并找到它,但 jsvc 正在 /usr/lib/jvm/java-11-openjdk-amd64 寻找它//lib/ amd64 /server/libjvm.so。所以,我这样做了,然后 jscv 起作用了:

sudo mkdir /usr/lib/jvm/java-11-openjdk-amd64/lib/amd64
sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/server /usr/lib/jvm/java-11-openjdk-amd64/lib/amd64/
Run Code Online (Sandbox Code Playgroud)

事实证明,该问题在更高版本的 jsvc 中得到解决。我在 jsvc 版本 1.0.6 上遇到了这个问题,如果您apt install jsvc在 Ubuntu 18.04 上运行,就会遇到这个问题。在我从 Apache 下载了 1.2.0 版本的 commons-daemon src 并自己编译了 jsvc 之后,问题就解决了,我不再需要符号链接了。


小智 -3

不知道为什么 jsvc 会尝试找到所有 dylib 文件并使用 dlopen 加载它们,但显然,这不适用于 Apple 的 Java 版本。虽然修复 jsvc 可能不太难,但我自己就这样启动了 JVM,

export JAVA_HOME=$(/usr/libexec/java_home)
export CATALINA_HOME=/Users/rong/Projects/apache-tomcat-8.0.12
export CATALINA_BASE=$CATALINA_HOME

java \
    -server \
    -classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
    org.apache.catalina.startup.Bootstrap \
    > $CATALINA_BASE/logs/catalina.out \
    2> $CATALINA_BASE/logs/catalina.err
Run Code Online (Sandbox Code Playgroud)

通过将其包装在 bash 脚本中并添加一些分支、更改 UID 内容,您可以完全忘记 jsvc。