问题标签 [jsvc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9849 浏览

java - Daemonizing java application with JSVC

I'm trying to daemonize my application using Apache Commons Daemon using the Daemon interface. Java application it self isn't doing anything just writes to stout.

I compiled jsvc: http://people.apache.org/~mturk/daemon-1.0.10/

(even tried newest version: http://people.apache.org/~mturk/daemon-1.0.12/ )

and wrote this basic script.

Now when I try to stop the daemon when it's not running I'll get response code 255. Thas fantastic.

But when I try start the daemon when it's already running I get response code 0. But in my errfile I find:

Same thing when I try throw exception in start() method and attempt to start daemon, response code 0. But errfile:

What I'm missing here? How can I inform user stat the deamon didn't start or that it is already running?

0 投票
2 回答
1352 浏览

java - 让 jsvc 在 OSX 上运行

我正在尝试重现这篇文章中编写的代码:

如何使用 jsvc 将 java 程序转换为守护进程?

没有花哨的 bash 脚本。

我创建了罐子。这是我正在运行的命令:

现在......这绝对没有任何作用。没有任何输出。我什至用脚本尝试过。又没有输出了。而且由于 jsvc 根本不会抛出任何类型的错误,我不知道问题是什么。

我什至尝试使用-server或运行它sudo。然后我可以看到它出现在进程下,但它仍然什么都不做。详细信息也不做任何事情并且JAVA_HOME配置正确。

任何线索/想法?有人在 OSX 下做过这项工作吗?

编辑:

日志记录是系统输出,根据该帖子和 jscv 的手册应在输出文件中捕获。

是的,我确实尝试设置错误文件。再一次没有运气,它甚至没有被创造出来。

我试着给它一个用户。并且代码与链接问题中的代码完全相同,这就是为什么我没有将这张票弄乱的原因。

我编译了我的 jsvc 并且没有安装 tomcat。

0 投票
1 回答
2517 浏览

java - 在 jsvc 类路径中使用多个 jar

我正在尝试使用 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 识别清单?

0 投票
2 回答
13049 浏览

java - 如何让 Jsvc 找到 DaemonLoader?

commons-daemon-x.jarclasspath. Jsvc正在成功启动 Java VM。但是jsvc报告它无法找到守护程序加载程序类,即使它位于classpath.

有谁知道如何解决这个问题?我正在运行 Mac OS X 10.8.3。谢谢。

jsvc这是调试输出的摘录:


如果有帮助,这是完整的调试输出:

0 投票
1 回答
1160 浏览

java - JSVC 无法注册本机方法

我正在尝试创建一个将在用 Java 编写的 Ubuntu Linux 中运行的服务。我的可执行 Jar 文件是一个大的胖 Jar 文件,其中包含所有依赖项。当我尝试使用 JSVC 运行它时出现以下错误。

杀死我的是“无法注册本机方法”行。这是什么意思,我该如何解决?

我正在使用 Eclipse IDE 用 Ja​​va 编写我的应用程序,我使用 apt-get (1.0.10-3) 安装了最新版本的 JSVC。我的 commons.daemon 库版本是 1.0.1。我的启动脚本如下。

0 投票
1 回答
1332 浏览

java - 是否可以在 JSVC 中启用端口以进行远程调试?

我正在运行一个运行良好的 jsvc 应用程序,但现在我需要在我的应用程序上启用一个端口,以便我可以进行远程调试。我正在使用 java 执行上述任务。

有什么办法可以完成上述任务吗?我检查了所有 JSVC 选项http://commons.apache.org/proper/commons-daemon/jsvc.html但没有找到任何东西。

这是添加jsvc参数的代码:

私有列表 getJSVCArgs(){ 列表 jsvcArgs = new ArrayList(); jsvcArgs.add(jsvcDir+"/jsvc"); jsvcArgs.add("-pidfile"); jsvcArgs.add("pidfile.pid"); jsvcArgs.add("-outfile"); jsvcArgs.add("outfile.txt"); jsvcArgs.add("-errfile"); jsvcArgs.add("errfile.txt"); jsvcArgs.add("-wait"); jsvcArgs.add(String.valueOf(jvmProperties.get("-wait"))); jsvcArgs.add("-user"); jsvcArgs.add(System.getProperty("user.name")); jsvcArgs.add("-home"); jsvcArgs.add(System.getProperty("java.home")); 返回 jsvcArgs;}

现在我需要将这个“-agentlib:jdwp=transport=dt_socket,address=8001,server=y,suspend=n”传递给 JSVC。任何人都知道如何实现它?

0 投票
1 回答
1046 浏览

java - Java GetResourceAsStream NullPointerException

我有一个 jar,我通常在 .sh 脚本中使用 jsvc 启动器作为守护进程运行。现在我创建了一个新的入口点,它需要检查一些事情并在控制台上返回一个输出,所以在同一个 .sh 脚本中,我根据参数进行了切换,以作为守护进程或作为标准 Java 应用程序运行。sh 与此类似:

只有以“check”标志开头时,我的 core.jar 才能读取我的 core.properties 文件,代码为:

例外是:

我的文件夹结构是这样的:

我的 jar 清单如下:

我看到包含 conf 目录,但我不知道 ./conf/ 是否包含该目录中的所有文件。我应该怎么做才能使属性文件作为守护进程和标准 jar 可读?

谢谢

0 投票
2 回答
3428 浏览

java - 作为 jsvc 运行的 Java 应用程序比 Heap+PermGen 使用更多的内存

我有以下服务器:

  • Ubuntu 服务器 12.04 LTS 64 位
  • 没有 GUI,只有命令行
  • 4GB 内存
  • 2个核心
  • 除了 Nagios NRPE 和 Webmin 之外,没有其他任何东西在运行
  • vm.swappiness = 0

这里没什么特别的,运行一个 Java 应用程序:

  • 使用 jsvc 作为守护进程运行 24/7
  • -Xmx2500M
  • -XX:+UseConcMarkSweepGC
  • 未进行其他设置
  • 使用 OpenJDK 7
  • 启用 JMX 服务器,并由 nagios 每分钟检查一次

但是,这不应耗尽所有内存并导致 java 应用程序无法通过 JMX 响应 nagios。

为什么这会耗尽我所有的内存并创建 SWAP?

0 投票
3 回答
16531 浏览

java - 从另一个 jar 文件访问资源

我有一个简单的结构:一个包含一批数据的数据 jar 文件和一个使用数据运行服务的服务 jar 文件。为了使数据易于替换,我将它们分开,并且 service.jar 的类路径包含 data.jar 所在的目录。

在 service.jar 中,我使用 getResource 来加载数据文件。如果数据文件直接在文件夹中,则此方法有效,但在 data.jar 中时失败;

这失败了:

但这有效:

我不想更改类路径(除非我可以将其更改为不依赖于数据 jar 文件名称的通用名称),但我可以更改 getResource 字符串(我尝试过 /data /mine.properties 和 /data.jar/mine.properties 无济于事)。我可以进行更改以便可以从 jar 中加载资源吗?

0 投票
3 回答
1251 浏览

java - 使用 Commons Daemon / JSVC 启动多个 Java 守护程序实例

我已经使用 Commons Daemon / JSVC 库守护了一个 Java 程序,并且能够成功启动/停止我的服务的一个实例。我真正需要做的是能够启动我的服务的多个实例,使用不同的命令参数启动和停止每个实例。

可能与这个问题无关,但有一点背景.. 我的服务包含一个绑定到特定端口的 HTTP 侦听器。每个实例将被初始化以侦听不同的端口。

我的问题是我无法使用 Commons Daemon 提供的内置功能启动我的 Java 类的多个实例。也许我错过了一些东西。我是一名长期的 Windows/C# 开发人员,但对 Java/Linux/Shell 脚本编写相对较新。

下面是启动 JSVC 进程和启动/停止我的守护进程的 shell 脚本。这是我在本网站的另一篇文章中找到的,稍作修改。它通过我的守护程序需要的一些命令参数,我从指定这些参数的单独启动和停止脚本调用这个 sh 脚本。

如果在 JSVC 中无法启动多个唯一 Java 类的实例,还有什么替代方法?我需要一种安全稳定的方式来启动该服务的多个实例(我将使用 SSH 以远程和编程方式执行此操作),并且每个实例都需要在完成后正常关闭,因为它们绑定到 TCP 端口。