64

我有一个可执行的 JAR 文件。是否可以创建该 JAR 的 Windows 服务?实际上,我只想在启动时运行它,但我不想将该 JAR 文件放在我的启动文件夹中,也不想放在注册表中。

4

7 回答 7

55

到目前为止,我为此找到的最简单的解决方案是Non-Sucking Service Manager

用法是

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"
于 2013-09-09T12:42:20.630 回答
21

使用 nssm.exe 但请记住设置 AppDirectory 否则将无法访问任何所需的库或资源。默认情况下,nssm 将当前工作目录设置为应用程序的 java.exe,而不是 jar。所以这样做来创建一个批处理脚本:

    pushd <path-to-jar>
    nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
    nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"

这应该可以解决服务暂停问题。

于 2016-02-25T17:11:53.477 回答
12

我一直在试验Apache Commons Daemon。它支持 windows ( Procrun ) 和 unix ( Jsvc )。Advanced Installer 有一个Java 服务教程,其中包含一个示例项目可供下载。如果您让他们的 javaservice.jar 作为 Windows 服务运行,您可以使用“telnet 4444”对其进行测试。我使用了他们的示例,因为我的重点是让 java windows 服务运行,而不是编写 java。

于 2010-03-17T22:33:50.267 回答
8

Tanuki 前段时间更改了 jsw 的许可证,如果我要开始一个项目,我会使用 Yet Another Java Service Wrapper,http://yajsw.sourceforge.net/,或多或少是一个模仿 JWS 的开源实现,并且然后以它为基础并进一步改进它。

编辑:我在几个平台(Windows,几个 linuxes ......)上使用 YAJSW 已经好几年了,这很棒,开发正在进行中。

于 2009-10-24T13:00:44.753 回答
5

使用 procrun,您需要将 prunsrv 复制到应用程序目录(下载),并创建一个 install.bat,如下所示:

set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%

我假设

  • 从 jar 和 prunsrv.exe 所在的同一目录运行它
  • 罐子有它的工作清单.MF
  • 并且您已将关闭挂钩注册到 JVM 中(例如在 Spring 中使用 context.registerShutdownHook() )...
  • 不使用 jar 外部文件的相对路径(例如 log4j 应该与log4j.appender.X.File=${app.home}/logs/my.log或类似的东西一起使用)

查看 procrun手册本教程以获取更多信息。

于 2013-02-28T13:18:13.633 回答
3

另一种选择是winsw:https ://github.com/kohsuke/winsw/

配置一个 xml 文件以指定服务名称、要执行的内容、任何参数等。并使用 exe 进行安装。示例 xml:https ://github.com/kohsuke/winsw/tree/master/examples

我更喜欢这个而不是 nssm,因为它是一个轻量级的 exe;并且配置 xml 很容易共享/提交到源代码。

PS服务是通过运行安装的your-service.exe install

于 2018-04-30T16:13:03.350 回答
0

【2020更新】

实际上,在花了一些时间尝试这里提供的不同选项之后,我发现最简单的方法是使用为此目的构建的小型付费工具:FireDaemon Pro。我试图将 Selenium 独立服务器作为服务运行,但没有一个免费选项可以立即运行。

该工具非常便宜(50 美元的一次性许可证,30 天试用期),我花了 5 分钟来设置服务器服务,而不是半天的阅读/故障排除。到目前为止,它就像一个魅力。

我绝对没有与 FusionPro 的链接,这是一个纯粹的无私建议,但如果它违反了论坛规则,请随时删除。

于 2020-10-12T08:55:16.363 回答