2

我有一个需要部署为可执行 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 中获取跨平台守护程序?提前致谢!

4

1 回答 1

1

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

Procrun 支持正确的 Windows 服务关闭(它可以在您正在运行的应用程序中调用停止方法)。它还具有一些额外的功能,例如可以选择将您的 stdout 和 stderr 重定向到单独的日志文件,并直接运行服务包装 exe(假设您将其重命名为您的服务名称)运行一个非服务模式控制台,让您看到立即输出。您可能想使用 procrun 的“jvm 模式”。阅读文档中有关如何执行此操作的详细信息。

如果您需要其他更高级的功能,例如服务需要能够自行重启,请查看YAJSW(Yet Another Java Service Wrapper)。YAJSW 总体上可能会更好,但我还没有尝试过。

于 2013-06-15T07:29:20.653 回答