问题标签 [apache-commons-daemon]

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 回答
579 浏览

java - jsvc & Gradle - 没有控制台输出,Gradle 守护进程崩溃

我正在尝试在我的本地机器上使用 IntelliJ IDEA 测试我的 Java 应用程序(它旨在用作守护程序,因此使用jsvc)。

出于测试目的,我希望将 stdout 和 stderr 都输出到控制台。根据 jsvc 帮助站点(jsvc --help)设置-outfile '&2'-errfile '&1'应该将 stdout 和 stderr 相互重定向(根据我的理解)。

在普通 shell(设置了这两个选项)中,守护进程启动并向控制台输出一些内容,但是当使用Gradle Exec 任务和完全相同的命令时,Gradle 守护进程崩溃并输出到文件“&2”和“&1” .

任务配置:

Gradle 守护进程崩溃(gradle -d run):

任何帮助,将不胜感激 :)

0 投票
1 回答
878 浏览

java - Apache Commons Daemon 指定类路径

我尝试使用 apache commons 守护程序将程序部署为 Windows 服务。我在类路径旁边的一切都设置得很好。

指定服务本身所在的位置,但服务需要一些配置文件才能运行,这些文件位于

现在我努力让它工作,以便程序C:\test\test-service\*用作类路径,而不仅仅是上面指定的两者之一。可悲C:\test\test-service\*的是不起作用,并ClassDefNotFoundException为初学者课程抛出了一个。该错误已解决,C:\test\test-service\lib\*但随后我收到无法读取我的配置文件的错误。因此我想,为什么不像这样将配置路径添加到类路径中:

但这仍然会抛出FileNotFoundException. 有人对此有解决方案吗?

0 投票
1 回答
469 浏览

java - 如何将 JNI 钩子添加到 Spring Boot 生成的一个 jar 中

我正在使用 Spring Boot gradle 插件 ( org.springframework.boot) 来生成“一个”jar。当我跑步时它运行良好java -jar app.jar- 完全符合预期。但是,该应用程序应该通过 JNI 使用 Apache Commons Daemon 作为守护程序运行。这个应用程序的早期版本是建立在自制框架之上的,我在主类中有方法,我可以在守护进程配置中指定startshutdown

我看到 Main-Class 变成org.springframework.boot.loader.JarLauncher了,它没有在它的任何地方实现startshutdown方法,或者它的超类。有一种launch方法,但我认为这只能用于运行 jar java -jar

这是由 gradle 插件生成的清单文件(已编辑)和反编译的一个 jar 的内容:

在此处输入图像描述

那么我的问题是:我可以配置这个 gradle 插件来添加 JNI 钩子方法,以便它们正确运行我的应用程序的主类吗?我知道有一个用于 Gradle 的 Shadow 插件来制作“uber”jar,我也可以放弃创建“uber”jar 并在lib/目录中分发(它是一个桌面应用程序)。但是,如果 Spring Boot 开发人员考虑过它并且有办法做到这一点,我宁愿使用它。

0 投票
0 回答
600 浏览

java - 在停止、systemd 和 Commons Daemon 之间安排正常关闭

请注意: Commons Daemon 自2013 年以来没有发布过。因此,如果有更现代的替代方案(与 更兼容systemd),那么我会全神贯注并接受任何想法!


我正在尝试将我的 Java 8 应用程序部署为由systemd. 我已经阅读了Commons Daemon文档,我相信实现这一点的方法如下:

  1. 写一个systemd服务单元文件,比如说一个/lib/systemd/system/myapp.service文件;这将允许我通过systemctl start myapp等手动控制我的应用程序,还允许我执行以下操作:将我的应用程序配置为在 Linux 启动时启动,如果它崩溃,总是尝试重新启动等。
  2. 然后我还需要实现Daemon接口(来自 Commons Daemon),这将允许我的应用程序“监听”发送给它的事件,systemd并在某些事情发生时调用正确的 Java 方法(应用程序启动、停止、重新启动、Linux是关机等)。

Daemon我对这种impl的最佳尝试:

我对Daemon界面的理解正确吗?MyApp简单地在内部实例化一个实例是否正确main,然后 Commons Daemon 负责调用init(...)start(...)为我?我是否正确初始化任何MyApp字段或从默认构造函数进行依赖注入,而是从内部进行所有这些操作init(...)

更重要的是(我的实际问题):哪些 Linux 命令会触发该stop(...)方法?

sudo shutdown -P now我问是因为我打算通过发出或通过关闭服务器,sudo halt -p并且想知道哪个(如果有)命令将提示systemd调用该MyApp#stop(...)方法。有任何想法吗?

0 投票
0 回答
87 浏览

java - Apache daemon 上的 Akka-http for java 存在一些问题

我有一些问题。

我试图介绍akka-http。但我从来没有用 scala 开发过,所以我用 akka-http 来做 java。

当我完成编程时,我想在产品的 Apache Daemon 上运行 akka-http 应用程序。

我尝试在 linux 上的应用程序上运行,并使用 maven 包。但也有一些问题。

我在 Daemon.out 中发现了以下消息

这是我的 pom.xml

这是 Daemon.sh

我的问题是什么?我尝试了很多事情,但我失败了。

谢谢你。

0 投票
0 回答
111 浏览

java - NanoHTTP 作为 Windows 服务与 Apache Commons Daemon

我使用 NanoHTTP 库制作了一个小型 HTTP 侦听器,我想将它与 Apache Commons Daemon ( https://commons.apache.org/proper/commons-daemon/index.html ) 一起使用,以便与 procrun 作为 Windows 服务一起安装。我阅读了文档,但我不明白如何在单独的过程中管理起停作业。如何从另一个单独的 Java 进程中停止 NanoHTTPD?

这是我的类扩展 NanoHTTPD:

0 投票
1 回答
524 浏览

java - Spring Boot Gradle Plugin 2.x 如何使用自定义启动器布局工厂

在我的项目中,我使用的是 activeMQ artemis 和 Spring Boot。该应用程序应作为 Apache Commons Daemon 服务执行。我想在这个项目中使用我的自定义启动器。

该项目具有以下 Gradle 配置:

因为我用的是activeMQ artemis,所以不能使用Spring Boot Plugin的1.5.x版本,因为它的依赖管理模块会自动将apache activeMQ降级到1.5.5版本。因为这个项目必须作为 Apache Commons Daemon Service 执行,所以我必须使用我的自定义 Spring Boot 启动器,这使得拥有静态启动器和类加载器成为可能。这两个帮助我停止已经运行的服务。

我尝试了以下设置,以使用以下设置将我的自定义启动器添加到生成的 jar 文件中。但是,这不是正确的方法,因为我必须手动将启动器的类名添加到清单文件中。

在 1.5.x 版本中,我可以使用以下选项来添加我的启动器配置:

是否有任何设置,我可以使用它来添加带有 Spring Boot Gradle 插件 2.x 的自定义启动器,还是我必须在这里使用任何解决方法?

0 投票
1 回答
531 浏览

java - 无需 apache-commons-daemon jar 直接实现 JSVC

根据 apache commons 文档(https://commons.apache.org/proper/commons-daemon/jsvc.html),我应该能够直接使用 jsvc 将我的应用程序作为守护程序运行,而无需实现 Daemon 类:

直接地

编写一个实现以下方法的类(MyClass):

  • void init(String[] arguments):这里打开配置文件,创建跟踪文件,创建ServerSockets,Threads
  • void start():启动线程,接受传入连接
  • void stop():通知线程终止run(),关闭ServerSockets
  • void destroy(): 销毁在 init() 中创建的任何对象

将其存储在 jarfile 中并按上述方式使用:

./jsvc -cp my.jar MyClass

MyClass 实现了上述方法,并没有实现 Daemon 类。但是,如果我尝试像上面那样调用 jsvc 而不在我的类路径中包含 commons-daemon.jar,

我收到以下错误:

如果我将它包含在类路径中,一切正常。,即

我对文档的理解是,如果我不使用该库中的任何内容,我不需要包含 commons-daemon.jar,而只需在我的类上直接调用 jsvc 并实现所需的方法。这是不正确的吗?我不想在我的包裹中捆绑任何不必要的罐子。

0 投票
1 回答
495 浏览

java - JSVC re-exec 需要使用绝对或相对路径执行

我的课:

我像这样运行 jsvc 跟随文档:

jsvc -cp Daemon.jar Main

jsvc -cp Daemon.jar MainClass

jsvc -cp ./commons-daemon-1.1.0.jar:./Daemon.jar MainClass

它也是返回:

JSVC re-exec 需要使用绝对或相对路径执行

谁能解释一下?请帮帮我!!!。

0 投票
0 回答
357 浏览

log4j - procrun windows 服务未读取我的配置文件且未生成日志(log4J)

我正在尝试使用 Apache Commons Daemon(procrun) 将 jar 作为 Windows 服务运行。这些服务不会产生日志,也不会读取配置文件。

jar 已成功启动。我在我的 jar 中使用 log4j 来记录日志,并将 log4j.properties 包含在 MyJar.jar 中。然而,该服务并未创建任何日志。而且我发现程序没有读取配置文件 - myConfig.config

我使用以下命令安装了服务:

我希望我的代码能够读取配置文件并适当地创建日志。如果我直接运行 jar,一切正常。仅当我使用 Apache Commons Daemon Procrun 将 jar 作为服务运行时才会出现此问题。