如何使用Apache Commons Daemon与跨平台服务



我有一个Java守护进程(运行24/7/365的系统服务)需要作为可执行JAR部署,但是我希望用户(在Windows, Linux和Mac上)能够通过:

启动/停止应用程序:
service myapp start
service myapp stop

(或与Windows/Mac服务等价的任何内容)。显然,这需要在操作系统级别将myapp"服务"映射到来自Java应用程序内部的特定方法调用(可能分别是LifecycleManager#start()LifecycleManager#stop())。

我听说Apache Commons Daemon可以用于此目的,在仔细阅读了他们的网站后,看起来它就是这样做的。然而,它看起来像是一个老项目,真的没有任何文档来完成我正在寻找的。

所以我问:commons-daemon可以做我需要的,或者我需要其他的或额外的?如何从可执行JAR中获得跨平台守护进程?提前感谢!

是的,Apache Commons Daemon可以在Windows(使用procrun)上作为服务运行jar,也可以在*NIX(使用JSVC)上作为守护进程运行jar。我只在Windows上使用它,所以其余的只适用于procrun:

Procrun支持正确的Windows服务关闭(它可以在运行的应用程序中调用停止方法)。它还有一些额外的功能,比如可选地将标准输出和标准错误重定向到单独的日志文件,直接运行服务包装器exe(假设您将其重命名为您的服务名称)会运行一个非服务模式控制台,让您立即看到输出。您可能想使用procrun的"jvm模式"。在文档中阅读如何做到这一点的详细信息。

如果您需要额外的更花哨的功能,例如服务需要能够重新启动自己,请查看YAJSW (Yet Another Java service Wrapper)。总的来说,YAJSW很可能更好,但我还没有尝试过。

最新更新