问题标签 [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.
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):
任何帮助,将不胜感激 :)
java - Apache Commons Daemon 指定类路径
我尝试使用 apache commons 守护程序将程序部署为 Windows 服务。我在类路径旁边的一切都设置得很好。
指定服务本身所在的位置,但服务需要一些配置文件才能运行,这些文件位于
现在我努力让它工作,以便程序C:\test\test-service\*
用作类路径,而不仅仅是上面指定的两者之一。可悲C:\test\test-service\*
的是不起作用,并ClassDefNotFoundException
为初学者课程抛出了一个。该错误已解决,C:\test\test-service\lib\*
但随后我收到无法读取我的配置文件的错误。因此我想,为什么不像这样将配置路径添加到类路径中:
但这仍然会抛出FileNotFoundException
. 有人对此有解决方案吗?
java - 如何将 JNI 钩子添加到 Spring Boot 生成的一个 jar 中
我正在使用 Spring Boot gradle 插件 ( org.springframework.boot
) 来生成“一个”jar。当我跑步时它运行良好java -jar app.jar
- 完全符合预期。但是,该应用程序应该通过 JNI 使用 Apache Commons Daemon 作为守护程序运行。这个应用程序的早期版本是建立在自制框架之上的,我在主类中有方法,我可以在守护进程配置中指定start
。shutdown
我看到 Main-Class 变成org.springframework.boot.loader.JarLauncher
了,它没有在它的任何地方实现start
和shutdown
方法,或者它的超类。有一种launch
方法,但我认为这只能用于运行 jar java -jar
。
这是由 gradle 插件生成的清单文件(已编辑)和反编译的一个 jar 的内容:
那么我的问题是:我可以配置这个 gradle 插件来添加 JNI 钩子方法,以便它们正确运行我的应用程序的主类吗?我知道有一个用于 Gradle 的 Shadow 插件来制作“uber”jar,我也可以放弃创建“uber”jar 并在lib/
目录中分发(它是一个桌面应用程序)。但是,如果 Spring Boot 开发人员考虑过它并且有办法做到这一点,我宁愿使用它。
java - 在停止、systemd 和 Commons Daemon 之间安排正常关闭
请注意: Commons Daemon 自2013 年以来没有发布过。因此,如果有更现代的替代方案(与 更兼容systemd
),那么我会全神贯注并接受任何想法!
我正在尝试将我的 Java 8 应用程序部署为由systemd
. 我已经阅读了Commons Daemon文档,我相信实现这一点的方法如下:
- 写一个
systemd
服务单元文件,比如说一个/lib/systemd/system/myapp.service
文件;这将允许我通过systemctl start myapp
等手动控制我的应用程序,还允许我执行以下操作:将我的应用程序配置为在 Linux 启动时启动,如果它崩溃,总是尝试重新启动等。 - 然后我还需要实现
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(...)
方法。有任何想法吗?
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
我的问题是什么?我尝试了很多事情,但我失败了。
谢谢你。
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:
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 的自定义启动器,还是我必须在这里使用任何解决方法?
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 并实现所需的方法。这是不正确的吗?我不想在我的包裹中捆绑任何不必要的罐子。
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 需要使用绝对或相对路径执行
谁能解释一下?请帮帮我!!!。
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 作为服务运行时才会出现此问题。