java后台/守护进程/服务跨平台最佳实践

发布于 2024-07-09 06:21:31 字数 309 浏览 11 评论 0原文

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

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

  1. 需要最少数量的特定于平台的代码。
  2. 不要求用户做任何普通计算机用户不能/不会做的事情,也
  3. 不会成为资源占用者。

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

如何前进?

I am looking for the best way to make my desktop java program run in the background (daemon/service?) across most platforms (Windows, Mac OS, Linux [Ubuntu in particular]).

By "best way" I am hoping to find a way that will:

  1. require a minimum amount of platform-specific code.
  2. not require the user to do anything a general computer user couldn't/wouldn't do
  3. not be a resource hog.

I understand that my requirements may be unrealistic but I am hoping there is some sort of "best practice" for this type of situation.

How to go forward?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

以可爱出名 2024-07-16 06:21:31

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

结构

守护进程由两部分组成。 一个是用 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()

You can run a Java application as a service (Windows) or daemon (Linux) using the Apache Commons daemon code.

Structure

Daemon is made of 2 parts. One written in C that makes the interface to the operating system and the other in Java that provides the Daemon API.

Platforms

Both Win32 and UNIX like platforms are supported. For Win32 platforms use procrun. For UNIX like platforms use jsvc.

Java code

You have to write a Class (MyClass) that implements the following methods:

* 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()
冷心人i 2024-07-16 06:21:31

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

You can turn any Java program into a service/daemon using the Java Service Wrapper. It is used by multiple OSS projects, and ships as part of the Nexus Maven Repository Manager so that it can be installed as a service out of the box. To use it, you, the author, just need to create a configuration file and then run a simple batch file to create the service on Windows or copy an init script to the correct runlevel on Linux.

我不吻晚风 2024-07-16 06:21:31

您可以使用 SystemTray 类并安装您的应用程序与默认平台中的任何其他应用程序一样。

对于 Windows,它可能是在启动时运行的计划任务。
对于 Linux 和 OSX,我不知道(除了 crontab ,这在某种程度上太技术性了),但我很确定它们都有办法轻松地完成同样的事情。

不幸的是(截至今天)Apple 尚未完成 1.6 移植。

它不会是一个真正的恶魔,而是一个像 Google 桌面这样的应用程序。

我听说石英是一个不错的选择。 但我从来没有用过它。

You can use the SystemTray classes and install your app as any other in the default platform.

For windows it could be an scheduled task that run at startup.
For Linux and OSX I don't know (besides crontab wich is somehow too technical) but I'm pretty sure they both have a way to do the same thing easily.

Unfortunately (as of today) Apple hasn't finished the 1.6 port.

It won't be a real demon, but an app like Google Desktop.

I've heard Quartz is a good option. But I've never used it.

_失温 2024-07-16 06:21:31

如果您不需要免费的解决方案,您可以使用高级安装程序(www.advancedinstaller.com),它可以从您的 JAR 中制作 win-service 以及 MacOS 安装程序等等。

If you dont need free solution, you can use Advanced Installer (www.advancedinstaller.com), it can make win-service as well as MacOS installer from your JAR, and more..

薔薇婲 2024-07-16 06:21:31

查看 JDIC Java 桌面集成组件项目。 它支持桌面集成,例如系统托盘(或等效项)与跨平台 API。

其他人提到了 Quartz,它是一个企业作业调度程序。 它可以是轻量级的,具体取决于计划的作业,但它不具有任何本质上面向桌面的功能。 相反,它的许多功能像关系数据库一样依赖于企业支持。 如果您的应用程序主要是调度任务,那么执行作业的无头 Quartz 服务,通过桌面客户端与服务交互是合理的方法。

Check out JDIC, the Java Desktop Integration Components project. It supports desktop integration like system tray (or equivalent) with a cross-platform API.

Others have mentioned Quartz, which is an enterprise job scheduler. It can be lightweight, depending on the jobs that are scheduled, but it doesn't have any features that are inherently desktop-oriented. On the contrary, many of its features depend on enterprise support like a relational database. If your application is primarily scheduling tasks, a headless Quartz service executing jobs, with a desktop client to interact with the service is reasonable approach.

茶色山野 2024-07-16 06:21:31

Apache Directory Daemon 项目听起来像是执行此操作的最佳跨平台方法(使用 Java 包装器POSIX 下的 JSVC 和 windows 下的 procrun)。

The Apache Directory Daemon project sounds like the best cross platform way to do this (with Java wrappers for JSVC under POSIX and procrun under windows).

亽野灬性zι浪 2024-07-16 06:21:31

人们有时很难找到 prunsrv.exe 和/或 prunmgr.exe (procrun 的组件),它在 apache 站点上没有很好的记录,通常可以在档案中找到(注意。他们说 procrun 是 tomcat5.exe

) windows 你可以在这里找到它:
http://archive .apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.0.7-bin-windows.zip(包含32位和64位版本)

您不需要实现守护进程接口也不需要下载无论如何, prunsrv 可用于将任何应用程序转换为 Windows 服务

浏览其他平台的存档

People sometimes have difficulties finding prunsrv.exe and/or prunmgr.exe (components of procrun), its not well documented on the apache site, generally it can be found in the archives (note. they say that procrun is tomcat5.exe)

for windows you can find it here:
http://archive.apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.0.7-bin-windows.zip (contains both 32 and 64 bit versions)

you dont need to implement daemon interface nor download it at all, prunsrv can be used to turn any app to windows service

browse that archive for other platforms

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文