我有一个需要部署为可执行JAR的Java守护程序(运行24/7/365的系统服务),但我希望用户(在Windows,Linux和Mac上)能够启动/停止应用程序通过:
service myapp start
service myapp stop
(或者Windows / Mac服务的等价物)。显然,这需要在操作系统级别将myapp
“服务”映射到我的Java应用程序内部的特定方法调用(可能分别为LifecycleManager#start()
和LifecycleManager#stop()
)。
我听说Apache Commons Daemon可以用于此目的,并且在浏览了他们的网站之后,它看起来就像这样。然而,它看起来像是一个旧项目,并没有任何文档来完成我正在寻找的东西。
所以我问:commons-daemon
可以做我需要的,或者我还需要别的什么?如何从可执行JAR中获取跨平台守护程序?提前谢谢!
答案 0 :(得分:1)
是的,Apache Commons Daemon可以将您的jar作为服务运行在Windows上(使用procrun)或作为* NIX上的守护程序(使用JSVC)。我只在Windows上使用它,所以其余只适用于procrun:
Procrun支持正常的Windows服务关闭(它可以在正在运行的应用程序中调用stop方法)。它还有一些额外的功能,比如可选地将stdout和stderr重定向到单独的日志文件,并直接运行服务包装器exe(假设你将其重命名为你的服务名称)运行一个非服务模式控制台,让你看到立即输出。你可能想使用procrun的“jvm模式”。请阅读documentation。
中有关如何执行此操作的详细信息如果您需要其他更高级的功能,例如服务需要能够自行重启,请查看YAJSW(又一个Java Service Wrapper)。 YAJSW整体上可能更好,但我还没有尝试过。