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