最近我在工作的时候,因为服务器会定时重启的问题要求把项目的服务做成服务器,开机自启动,原先我找到一个办法就是给项目写了一个简单的bat脚本作为启动脚本,然后将开机自启动脚本按顺序放在开机自启动的文件夹中 (按下【win+R】打开运行输入:【shell:Common Startup】) 来实现开机自启动,但是这个方法有个问题就是开机自启动之后得登录对应的用户,所以我就放弃了,最后还是使用winSw将所需的一些服务器做成Windows服务的形式。
接下来就讲讲winSw制作Windows服务的过程,文章分别举三个例子 (jar包,war包,nginx服务)
1、下载
下载地址为:https://github.com/winsw/winsw/releases 先进行下载这个exe文件。
(1)jar包制作服务:
可以看到文件夹有两个文件,其中.exe文件其实就是刚刚下载的WinSW-x64.exe文件只是修改了名称没有进行其他任何修改。其中名称xiaomai-service就是我们的服务名,然后下面的xiaomai-service.xml是需要我们自己来创建编写的,制作服务需要这两个文件,其中文件名就是服务名并且两个文件的文件名一定要一样。
例如现在我们是将jar包的启动制作成服务xml的编写可以按照我下面的示例来进行修改:
<?xml version="1.0" encoding="UTF-8"?>
<service>
<!-- 服务ID名称(唯一) -->
<id>xiaomai-service</id>
<!-- 服务显示名称 -->
<name>xiaomai-service</name>
<!-- 服务的描述信息 -->
<description>KeXin xiaomai-service</description>
<!-- Executable (Java command to run the .jar file) -->
<executable>C:\Program Files\Java\jdk1.8.0_211\bin\java.exe</executable>
<!-- Arguments passed to the executable (match your original .bat script) -->
<arguments>
-Dfile.encoding=utf-8
-server
-Xms512m
-Xmx1g
-XX:+UseG1GC
-XX:SurvivorRatio=6
-XX:MaxGCPauseMillis=400
-XX:G1ReservePercent=15
-XX:ParallelGCThreads=4
-XX:ConcGCThreads=1
-XX:InitiatingHeapOccupancyPercent=40
-jar D:\xmtx\xiaomai\private-xiaomai-0.0.1-SNAPSHOT.jar
</arguments>
<!-- Working directory (where the service runs from) -->
<workingdir>D:\xmtx\xiaomai</workingdir>
<!-- If the service fails, restart it after 3 seconds -->
<onfailure action="restart" delay="3s"/>
<!-- Log output for the service -->
<logmode>rotate</logmode>
<logpath>D:\xmtx\WinSw\xiaomai\logs</logpath>
<!-- Set this to true if you want it to start automatically -->
<autostart>true</autostart>
<startdepend></startdepend>
</service>
executable: 标签中是我们的JDK中java.exe的位置自行修改。
arguments: 标签中是一些运行jar包的参数和位置。
onfailure: 标签是如果服务崩了的一个重启时间。
logpath: 标签是日志输出的文件夹
workingdir: 我写的是jar包所在的文件夹
然后这两个文件都没问题后,在当前目录开一个小黑窗 ,服务名➕install就可以了;
xiaomai-service install
任务管理器 --> 服务 --> 就会多一个xiaomai-service的服务
(2)war包制作服务
其实有了上面的经验,那么war包还是一样的,还是那两个文件然后小黑窗,服务名 + install 就可以了。唯一变化的就是xml文件的编写。
下面我给一个我的示例:
<?xml version="1.0" encoding="UTF-8"?>
<service>
<!-- Service name -->
<id>batchService</id>
<name>batchService</name>
<description>KeXin - batchService</description>
<!-- Executable to run (Tomcat startup script) -->
<executable>D:\xmtx\apache-tomcat-9.0.87-batch\bin\catalina.bat</executable>
<arguments>run</arguments>
<!-- Optional working directory -->
<workingdir>D:\xmtx\apache-tomcat-9.0.87-batch</workingdir>
<!-- 设置环境变量 -->
<env name="CATALINA_HOME" value="D:\xmtx\apache-tomcat-9.0.87-batch"/>
<env name="JAVA_HOME" value="C:\Program Files\Java\jdk1.8.0_211"/>
<!-- If the service fails, restart it after 3 seconds -->
<onfailure action="restart" delay="3s"/>
<!-- Log output for the service -->
<logmode>rotate</logmode>
<logpath>D:\xmtx\apache-tomcat-9.0.87-batch\logs</logpath>
<!-- Set this to true if you want it to start automatically -->
<autostart>true</autostart>
<startdepend></startdepend>
</service>
这个文件示例改改jdk的目录,Tomcat目录,服务名…信息就可以了。
(3)nginx制作Windows服务
最后nginx制作成Windows服务,也是差不多就是xml文件有所不同。下面是示例:
<service>
<id>nginx-service</id>
<name>Nginx Web Server</name>
<description>Nginx Web Server Service</description>
<executable>D:\zzdy\nginx-1.16.1\nginx.exe</executable>
<arguments>-p D:\zzdy\nginx-1.16.1 -c D:\zzdy\nginx-1.16.1\conf\nginx.conf</arguments>
<logpath>D:\zzdy\nginx-1.16.1\logs</logpath>
<logmode>roll</logmode>
</service>
文章基于个人学习,参考创作,如果有代码写的不好的地方欢迎大佬指出!一起进步!