【问题标题】:jscv : Cannot locate JVM library filejscv:找不到 JVM 库文件
【发布时间】:2014-09-16 12:05:21
【问题描述】:

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

jsvc -cp ApacheDeamonDemo.jar -pidfile /mypath/pid.txt -outfile /mypath/log.txt -errfile /mypath/err.log net.example.deamon.DemoDeamon

我得到以下错误输出:

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

其实路径是正确的。因此我不明白为什么 jsvc 告诉我这个。我用的是mac。

【问题讨论】:

  • 我知道现在发表评论已经很晚了。留在这里,如果它会在未来帮助任何人。就我而言,经过几个小时的调试,结果我的 java 安装是 32 位的,而系统是 64 位的。

标签: jvm daemon jsvc


【解决方案1】:

差不多五年后,所以帮助最初的提问者可能为时已晚,但我今天尝试用 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/

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

【讨论】:

  • 谢谢!这个问题在 Ubuntu 20.04 上仍然存在,它附带 jsvc 1.0.15-8 并且您的解决方法仍然有效。
  • 我需要这个解决方法来在 Ubuntu 20.04 上使用 openjdk-14-jre-headless 启动 UniFi 网络控制器。
【解决方案2】:

不知道为什么 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

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

【讨论】:

  • 对不起,这不是我要找的或我要求的。我知道如何从 shell 启动我的程序。这不是您在此处提供的解决方案或答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 2012-03-25
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多