【问题标题】:How do I run a Java .jar file as a Windows service on Windows Server 2008?如何在 Windows Server 2008 上将 Java .jar 文件作为 Windows 服务运行?
【发布时间】:2012-10-17 19:24:32
【问题描述】:

如何在 Windows 2008 服务器上将 Java .jar 文件作为 Windows 服务运行?我有一个名为 SomeJavaFile.jar 的 jar 文件,位于 Windows Server 2008 框上的 C:\SomeDirectory 目录下。我通常只是在命令行中手动运行这个 jar:java –cp SomeJavaFile.jar com.ctg.SomeJavaFile,然后让它 24/7 运行。

我们的 Windows Server 的问题是,如果它重新启动,我需要将它作为服务运行,以便它在启动时自动作为服务启动,因为我们对 Vistakon 的处理是 24/7 运行的。我用谷歌搜索并尝试使用服务包装器和 sc.exe 命令来创建服务。

我将包装器 service.exe 放在 C:\SomeDirectory\ 中。我使用以下命令来创建它:sc.exe SomeJavaService binPath= “C:\SomeDirectory\service.exe \”java –jar C:\SomeDirectory\SomeJavaFile.jar\”” type= own start= auto error= ignore。这会正确创建 SomeJavaService 服务,但是当我尝试启动它时,我收到一条错误消息,指出本地计算机上的服务已启动然后停止。

如果某些服务没有被其他服务或程序使用,它们会自动停止。我是否需要通过添加 com.ctg.SomeJavaFile 来更改我的 sc.exe 命令以获得确切的先前工作命令行?所以我应该改变这个 jar 应该只在后台运行并不断轮询/ping C:/poll 目录,然后如果存在数据,它会处理数据并将导出文件发送到另一个目录。

我多年来一直成功地使用这个相同的 .jar 文件,并且它没有改变,但我无法让它作为 Windows 服务运行。这是我用来获取服务包装器http://code.google.com/p/simple-service-wrapper/ 的站点。任何帮助将不胜感激!

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读常见问题解答,并格式化您的问题,以便于阅读。

标签: java windows jar windows-services


【解决方案1】:

“winsw”是随 Glassfish Java EE 参考实现一起提供的 Windows 服务安装程序的独立版本。

效果很好,但不是一个完全完美的产品 - 我已经为此目的使用了几年。在 Windows 机器上的某些最新版本中需要 .NET。

https://github.com/kohsuke/winsw

【讨论】:

  • 从当前版本 (1.9) 开始需要 .Net Framework 3.5。
【解决方案2】:

我认为最好的办法是用 ProcrunApache Commons Daemon 包装你的 java 应用程序。

Procrun 是一组允许 Windows 用户打包的应用程序 (主要是)Java 应用程序(例如 Tomcat)作为 Windows 服务。

服务可以设置为开机自动启动 并将在没有用户登录机器的情况下继续运行。

【讨论】:

    【解决方案3】:

    根据我的分析,

    空闲解决方案将编写一个 VC++ (.net) Windows 服务创建程序,以将 .bat(触发 jar 文件)/.exe 作为系统服务启动,其中包含对 SCM 的所有必需回调方法。

    注意: 1. 使用 sc.exe / srvany.exe 包装进程将不起作用,因为它没有任何对 SCM(服务控制管理器)的回调进程。 2. java service Wrapper是第三方API(很多是LGPL许可的)。

    【讨论】:

      【解决方案4】:

      如果您从命令行使用 java -j some.jar 启动 Java 代码,它会一直运行到您终止程序,还是会自行停止?

      需要有一个非守护线程,它一直在运行。 JVM 将终止,如果没有线程在运行,即未标记为守护进程。

      如果您的预算不多,请购买安装工具。我使用 instll4j。使用该工具,您可以创建服务启动器并在安装过程中安装它们。

      【讨论】:

        【解决方案5】:

        以下解决方案适用于我在 Windows Server 上作为服务运行的 OpenFire 连接管理器(这是一个 jar 文件)。

        下载安装the Non-Sucking Service Manager

        我没有使用 OpenFire 团队制作的批处理,因为它对我不起作用(未找到依赖项错误...)所以,使用以下代码制作一个批处理文件:

        @ECHO OFF
        
        cd /D "E:\connection_manager\lib"
        java -jar startup.jar
        

        在连接管理器的bin文件夹中保存为cm_startup.bat

        之后,您可以使用 NSSM 创建服务。 因此,打开cmd.exe 并运行以下命令:

         nssm install ConnManager "E:\connection_manager\lib\cm_startup.bat"
        

        .

        文档和示例

        更多关于非吸吮服务管理器的文档和示例在这里:https://nssm.cc/usage 实际上 NSSM 有很多可用的选项。

        这是一个更复杂的例子:

        nssm install solr "%JavaExe%" -Dsolr.solr.home="\"%CD%\solr"\"
        -Djetty.home="\"%CD%"\" -Djetty.logs="\"%CD%\logs"\" -cp
        "\"%CD%\lib\*.jar"\";"\"%CD%\start.jar"\" -jar "\"%CD%\start.jar"\"
        

        【讨论】:

          猜你喜欢
          • 2018-05-22
          • 1970-01-01
          • 2018-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多