java background/daemon/service 跨平台最佳实践

我正在寻找最好的方法,让我的桌面java程序在大多数平台(Windows,Mac OS,Linux [特别是Ubuntu])的后台运行(守护进程/服务?)。

通过“最佳方式”,我希望找到一种能够:

  1. 需要少量的特定于平台的代码。
  2. 不要求用户执行一般计算机用户不能/不会执行的操作
  3. 不是资源浪费。

我知道我的要求可能是不切实际的,但我希望有某种“最佳实践”来应对这种情况。

如何前进?


答案 1

您可以使用 Apache Commons 守护程序代码运行 Java 应用程序即服务 (Windows) 或守护进程 (Linux)。

结构

守护进程由 2 部分组成。一个用C编写,用于创建操作系统的接口,另一个用Java编写,提供Daemon API。

平台

支持Win32和UNIX平台。对于 Win32 平台,请使用 procrun。对于类似UNIX的平台,请使用jsvc。

Java 代码

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

* void load(String[] arguments): Here open the configuration files, create the trace file, create the ServerSockets, the Threads
* void start(): Start the Thread, accept incoming connections
* void stop(): Inform the Thread to live the run(), close the ServerSockets
* void destroy(): Destroy any object created in init()

答案 2

您可以使用 Java Service Wrapper 将任何 Java 程序转换为服务/守护程序。它由多个OSS项目使用,并作为Nexus Maven存储库管理器的一部分提供,以便它可以作为开箱即用的服务安装。要使用它,您(作者)只需要创建一个配置文件,然后运行一个简单的批处理文件即可在Windows上创建服务,或者在Linux上将初始化脚本复制到正确的运行级别。


推荐