6

当我尝试启动演示 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。

4

2 回答 2

15

差不多五年后,所以帮助最初的提问者可能为时已晚,但我今天尝试使用 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 的问题,如果你apt install jsvc在 Ubuntu 18.04 上运行,就会遇到这个问题。在我从 Apache 下载 1.2.0 版本的 commons-daemon src 并自己编译 jsvc 后,问题已解决,我不再需要符号链接。

于 2019-07-09T16:23:35.047 回答
-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

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

于 2014-09-29T04:59:36.977 回答