zoukankan      html  css  js  c++  java
  • Winsw将jar包部署为windows服务

    1. 下载Winsw

    https://github.com/winsw/winsw/releases

    下载winsw官网上的xml文件和.exe文件

    2. 编辑配置文件

    创建一个文件夹demo,将所需要转换的jar包,和这两个文件放在一起,并且将.exe的文件名修改和.xml文件一样,比如test.exe和test.xml

    xml的可选项

    <!--
     这是Windows服务包装器的一个配置示例。
     此配置文件应放在WinSW.exe同目录,名称应相同。
     例如,对于myapp.exe,配置文件名应为myapp.xml。
     更多信息:https://github.com/kohsuke/winsw/blob/master/doc/xmlconfigfile.md
    -->
    <configuration>
      
    <!-- 
    SECTION: 必填项
    -->
      
      <!-- 服务ID,在windows系统中必须唯一 -->
      <id>myapp</id>
      <!-- 服务显示名称,只能英文和数字 -->
      <name>MyApp Service (powered by WinSW)</name>
      <!-- 服务描述,只能英文和数字 -->
      <description>This service is a service cratead from a sample configuration</description>
      
      <!-- 启动可执行文件的路径 -->
      <executable>%BASE%myExecutable.exe</executable>
     
    <!--
    SECTION: 安装
    这些选项仅在安装时有效。修改配置后,必须重新安装服务才能生效。
    -->
     
      <!--
        OPTION: serviceaccount
        定义运行服务的账号。
      -->
      <!--
      <serviceaccount>
        <domain>YOURDOMAIN</domain>
        <user>useraccount</user>
        <password>Pa55w0rd</password>
        <allowservicelogon>true</allowservicelogon>
      </serviceaccount>
      -->
      
      <!--
        OPTION: onfailure
        定义一系列操作,如果托管的可执行文件失败,则顺序执行这些操作。
        支持的操作:restart,reboot,none
      -->
      <!--
      <onfailure action="restart" delay="10 sec"/>
      <onfailure action="restart" delay="20 sec"/>
      <onfailure action="reboot" />
      -->
      
      <!--
        OPTION: resetfailure
        windows服务重置故障状态的时间。
        默认值 1 day
      -->
      <!--
      <resetfailure>1 hour</resetfailure>
      -->
     
    <!--
    SECTION: 执行管理配置
    -->
     
      <!-- 
        OPTION: arguments
        传递给可执行文件的参数。
      -->
      <!--
      <arguments>-classpath c:cygwinhomekohsukewshello-worldoutproductionhello-world test.Main</arguments>
      -->
     
      <!-- 
        OPTION: startarguments
        可执行文件启动参数。
        如果配置,则覆盖"arguments"
      -->
      <!--
      <startarguments></startarguments>
      -->
      
      <!--
        OPTION: workingdirectory
        如果指定,则设置可执行文件的默认工作目录。
        默认值:服务包装的可执行文件的目录
      -->
      <!--
      <workingdirectory>C:myAppwork</workingdirectory>
    -->
      
      <!--
        OPTION: priority
        所需的进程优先级。
        可设置的值:Normal, Idle, High, RealTime, BelowNormal, AboveNormal
        默认值:Normal
      -->
      <priority>Normal</priority>
      
      <!-- 
        OPTION: stoptimeout
        强制终止可执行文件之前,尝试正常关闭的等待时间。
        默认值:15 seconds
      -->
      <stoptimeout>15 sec</stoptimeout>
        
      <!--
        OPTION: stopparentprocessfirst
        如果设置为true,在停止子进程之前终止父进程。
        默认值:false
      -->
      <stopparentprocessfirst>false</stopparentprocessfirst>
     
      <!-- 
        OPTION: stopexecutable
        执行关闭服务的可执行文件路径。
        只有配置了"stoparguments"时,才使用此配置。如果没有则用"executable"关闭服务
      -->
      <!--
      <stopexecutable>%BASE%stop.exe</stopexecutable>
      -->
     
      <!-- 
        OPTION: stoparguments
        终止服务时,传递给"stopexecutable"的附加参数
        此选项还允许通过停止可执行文件终止可执行文件
      -->
      <!--
      <stoparguments>-stop true</stoparguments>
      -->
    <!-- 
    SECTION: 服务管理
    -->
        <!--
          OPTION: startmode
          定义服务的启动模式
          支持的模式:Automatic, Manual, Boot, System (latter ones are supported for driver services only)
          默认模式:Automatic
        -->
        <startmode>Automatic</startmode>
        
        <!--
          OPTION: delayedAutoStart
          如果在"startmode"配置了"Automatic",则启用延迟自动启动。
          请参阅Winsw文档以获取有关支持的平台版本和限制的信息。
        -->
        <!--
            <delayedAutoStart/>
        -->
        
        <!-- 
          OPTION: depend
          在本服务启动之前启动的服务。
        -->
        <!--
        <depend>Eventlog</depend>
        <depend>W32Time</depend>
        -->
        
        <!--
          OPTION: waithint
          挂起停止操作所需的时间
          在指定的时间段过去之前,服务应该下次调用setServiceStatus函数。
          否则服务将被标记为无响应
          默认值:15 seconds
        -->
        <waithint>15 sec</waithint>
        
        <!--
          OPTION: sleeptime
          服务下次调用setServiceStatus函数之前的时间。
          不要超过"waithint"。建议间隔是"waithint"的十分之一,但不小于1秒,也不大于10秒。
          默认值:1 second
        -->
        <sleeptime>1 sec</sleeptime>
        
        <!--
          OPTION: interactive
          指示服务可以与桌面交互。
        -->
        <!--
        <interactive/>
        -->
        
    <!-- 
    SECTION: 日志记录 
    -->
     
      <!--
        OPTION: logpath
        为服务包装程序生成的所有日志设置自定义日志目录。
        默认值:包含执行器的目录
      -->
      <!--
        <logpath>%BASE%logs</logpath>
      -->
      
      <!--
        OPTION: log
        为可执行文件生成的日志定义日志记录模式。
        支持的模式:
          * append - 追加到现有日志
          * none - 不保存日志
          * reset - 启动时擦除日志
          * roll - 根据大小自动循环分割日志
          * roll-by-time - 根据日期循环分割日志
        默认模式: append
        
        每种模式都有不同的设置。https://github.com/kohsuke/winsw/blob/master/doc/loggingAndErrorReporting.md
      -->
      <log mode="append">
        <!--
        <setting1/>
        <setting2/>
      -->
      </log>
      
    <!--
    SECTION: 环境设置
    -->
      <!--
        OPTION: env
        设置或重写环境变量。
        顶层可能配置了多个条目。
      -->
      <!--
      <env name="MY_TOOL_HOME" value="C:etc	oolsmyTool" />
      <env name="LM_LICENSE_FILE" value="host1;host2" />
      -->
     
     
      <!--
        OPTION: download
        启动前由包装器执行的下载列表。
      -->
      <!--
      <download from="http://www.google.com/" to="%BASE%index.html" />
      
      下载并在出现错误时使服务启动失败:
      <download from="http://www.nosuchhostexists.com/" to="%BASE%dummy.html" failOnError="true"/>
      由于连接未加密而导致基本身份验证不安全的示例:
      <download from="http://example.com/some.dat" to="%BASE%some.dat"
                auth="basic" unsecureAuth=“true”
                username="aUser" password=“aPassw0rd" />
      通过HTTPS安全基本身份验证
      <download from="https://example.com/some.dat" to="%BASE%some.dat"
                auth="basic" username="aUser" password="aPassw0rd" />
      当目标服务器和客户端是同一域的成员,并且客户端域属于具有信任的域时,安全身份验证:
      <download from="https://example.com/some.dat" to="%BASE%some.dat" auth="sspi" />
      -->
     
    <!-- 
    SECTION: 其他选项
    -->
      
      <!--
        OPTION: beeponshutdown
        指示服务在关闭时(如果操作系统支持)应发出嘟嘟声。
      -->
      <!--
      <beeponshutdown/> 
      -->
      
    <!--
    SECTION: 扩展
    此配置部分允许指定自定义扩展。
    更多信息请访问:https://github.com/kohsuke/winsw/blob/master/doc/extensions/extensions.md
    -->
     
    <!--
    <extensions>
      Extension 1: id values must be unique
      <extension enabled="true" id="extension1" className="winsw.Plugins.SharedDirectoryMapper.SharedDirectoryMapper">
        <mapping>
          <map enabled="false" label="N:" uncpath="\UNC"/>
          <map enabled="false" label="M:" uncpath="\UNC2"/>
        </mapping>
      </extension>
      ...
    </extensions>
    -->
     
    </configuration>
    
    

    3.示例xml文件

    <service>
        <id>demo</id>
        <name>demo</name>
        <description>This is HelloWorld service.</description>
        <executable>D:jdk1.8.0_202injava.exe</executable>
        <arguments>-jar D:demodemo.jar</arguments>
        <startmode>Automatic</startmode>
        <logpath>%BASE%log</logpath>
        <logmode>rotate</logmode>
    </service>
    
    # 直接使用系统变量的写法
    <service>
        <id>demo</id>
        <name>demo</name>
        <description>winsw将jar包注册为windows服务demo</description>
        <env name="JAVA_HOME" value="%JAVA_HOME%"/>
        <executable>java</executable>
        <arguments>-jar D:demodemo.jar</arguments>
        <startmode>Automatic</startmode>
        <logpath>%BASE%log</logpath>
        <logmode>rotate</logmode>
    </service>
    

    name与description是注册到windows服务后的名称与描述,
    env配置读取windows配置的java环境变量,
    executable与arguments里面的内容拼接起来就是我们平常使用的启动jar包的命令,
    arguments中配置各种启动参数,jar包路径使用绝对路径,相对路径需要配置环境变量像JAVA_HOME那样使用env标签读取,
    startmode设置为windows开机自启动,如果不需要开机自启可以去掉这个标签,
    logpath设置日志输出路径,这里也是使用绝对路径输出到logs文件夹,
    log标签内配置日志模式

    4. 运行test.exe文件

    # 在命令行窗口执行如下命令
    test.exe install
    

    注:图示使用的服务是demo1,供展示

    5.删除服务

    使用管理员权限打开命令行窗口,执行如下命令

    sc delete demo
    

    6.设置程序启动

    上述步骤是设置程序开机自启动,但是服务未启动,结合bat文件来实现

    # demo.bat
    @echo.服务启动......
    @echo off
    @sc create demo binPath= "D:demo	est.exe"
    @net start demo
    @sc config demo start= AUTO
    @echo off
    @echo.启动完毕!
    @pause
    

    7.汇总

    若是有第6步操作,则直接执行demo.bat文件即可,就不用再执行test.exe install这一步了
    这样一来就实现了windows系统下把jar程序注册成服务,服务开启,并且服务开机自启动等。

    8.日志

    由配置文件可知,日志是在当前目录下的log文件夹下,里面有三个log文件

    test.wrapper.log是winsw程序日志
    test.out.log 是jar程序本身运行的日志

    9.补充

    服务重启的方式:
    第一种是通过命令行的方式:

    net stop mysql
    net start mysql
    

    第二种是服务功能
    windows+R, 输入: services.msc,找到对应的服务来操作

  • 相关阅读:
    mysql关联取附表最后一条记录,附加lareval orm实现
    lumen 常用辅助函数
    Lumen Carbon 日期及时间处理包
    $_SERVER,IP,域名常用方法
    上传Docker镜像到阿里云
    connect() failed (111: Connection refused) while connecting to upstream, cli
    linux使用常见问题
    docker实用命名
    yii 常用orm
    Hibernate多对多映射(双向关联)实例详解——真
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/14658907.html
Copyright © 2011-2022 走看看