5

我正在尝试使用 jsvc 让 Java 应用程序作为 Linux 服务运行。我发现如何使用 jsvc 将 java 程序转换为守护进程?这能够让我大部分时间,但我仍在努力弄清楚类路径。

我收到以下错误到 st​​derr:

19/04/2013 10:43:18 12233 jsvc.exec 错误:找不到守护程序加载程序 org/apache/commons/daemon/support/DaemonLoader

19/04/2013 10:43:18 12231 jsvc.exec 错误:服务退出,返回值为 1

运行时似乎无法找到 commons-daemon.jar。

我的应用程序的结构使得应用程序本身位于一个 jar 文件中,具有依赖项,包括 lib 目录中的 commons-daemon。

  • 守护进程脚本.sh
  • myapp.jar
  • lib/commons-daemon.jar
  • 库/其他罐子

这是我的 daemon-script.sh 的相关部分:

LIB_DIR=$(pwd)/lib/*

CLASS_PATH=$(pwd)/myapp.jar

$EXEC -home $JAVA_EXEC -cp $CLASS_PATH:$LIB_DIR -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS

我尝试了很多变体:相对路径,特别是引用 lib/commons-daemon.jar,没有通配符等。有人知道如何使它正常工作吗?

此外,myapp.jar 是一个自执行 jar (主要用于测试目的,是的,我仍然需要它作为服务运行),因此 manifest.mf 包含 Class-Path 和 Main-Class 属性。有没有办法让 jsvc 识别清单?

4

1 回答 1

2

您可以在 JSVC 中使用多个 jar,在它们之间使用:

对于您的特定问题,解决方案是将 CLASS_PATH 变量更改为:

CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/commons-daemon.jar:$(pwd)/lib/other-jars

或者,您可以使用如下通配符将所有 jar 包含在目录中:

CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/*.jar

希望这可以帮助

于 2013-05-09T13:57:30.900 回答