将java,tomcat,nginx,redis部署成windows启动服务
文章目录
前言
原来我的做法是写一个bat脚本,然后将它的快捷方式复制到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp,这样就可以开机自启了。不过这种方式有一个非常大的缺点,就是开机之后会显示一个命令行窗口!而且这个窗口还不能关,一关程序就停了。
好在,有个利器winsw,它可以将Windows上的任何一个程序注册为服务,如果不需要,也可以方便的卸载服务。
winsw:Windows Service Wrapper缩写,是包装任何应用程序注册成windows服务的exe程序
注意点
windows系统需要以管理员权限运行命令,也就是说右键选择以管理员身份运行
批处理文件
下载地址
github地址源码地址,
github released版本下载地址,包括exe,样例,源码下载
官方英文安装文档
只有发布版exe下载地址
注册java
以MyApp.jar为例,注意xml和exe名字要保持一致。新建一个project文件夹
创建MyApp.xml文件
<service>
<id>MyApp</id>
<name>MyApp</name>
<description>This runs Spring Boot as a Service.</description>
<env name="MYAPP_HOME" value="%BASE%"/>
<executable>java</executable>
<arguments>-Xmx256m -jar "%BASE%\MyApp.jar"</arguments>
<logmode>rotate</logmode>
</service>
上面的MYAPP_HOME是系统环境变量,我们需要像设置JAVA-HOME一样设置。地址指向jar文件地址,当然如果我们不使用环境变量的方式,那就直接在xml里指定jar的目录地址。我就是这样的方式。所以我的MyApp.xml文件为
<service>
<id>Kelaien</id>
<name>Kelaien</name>
<description>This runs Spring Boot as a Service.</description>
<executable>java</executable>
<arguments>-Xmx256m -jar "myApp.jar" --spring.profiles.active=stage --spring.datasource.dbname=donglitestdb --server.port=9982</arguments>
<logmode>rotate</logmode>
</service>
arguments是java命令后的一些参数,是自定义的。
id和name就是注册到windows服务的名字,建议和文件名保持一致,这里就是MyApp
创建MyApp.exe
其实不是重新创建而是重命名,将下载的winsw.exe重命名为MyApp.exe。注意名字要和MyApp.xml保持一致
官方这么说的:you have to rename the winsw.exe to MyApp.exe so that its name matches with the MyApp.xml
,注意是必需
创建MyApp.jar
将准备好的jar重命名为MyApp.jar,当然,这个可以不是MyApp,也可以是其它的。比如MyApp.xml里的配置是这样的
<arguments>-Xmx256m -jar "myApp.jar" --spring.profiles.active=stage --spring.datasource.dbname=donglitestdb --server.port=9982</arguments>
是小写。
安装服务
至些就制作完成,就可以使用install/uninstall命令了
安装服务:MyApp.exe install
卸载服务:MyApp.exe uninstall
检查状态:MyApp.exe status
启动服务:MyApp.exe start
或net start MyApp
停止服务:MyApp.exe stop
或net stop MyApp
重启服务:MyApp.exe restart
或
windows下没有重启服务,我们可以先stop服务再start服务。批处理如下
restart.bat
net stop %1
net start %1
重启服务:restart 服务名
问题
如果报WMI Operation failure: AccessDenied
解决办法:
- 那就创建一个批处理文件,然后以管理员权限运行,
比如如下installDongLi.bat:
D:\tmp\dongliService\DongLi.exe install
pause
- window+x 使用管理员权限运行命令行,然后输入命令
注册nginx
winsw
也可以包装其它exe文件,或可启动文件。做成windows服务。以nginx
为例
将winsw.exe改名为NginxService.exe
创建NginxService.xml如下
<service>
<id>NginxService</id>
<name>NginxService</name>
<description>This runs Spring Boot as a Service.</description>
<executable>D:\soft\nginx\nginx-1.15.2\nginx.exe</executable>
</service>
将上面文件放到nginx
安装文件包下
创建installService.bat
批处理文件
D:\soft\nginx\nginx-1.15.2\NginxService.exe install
注意是绝对路径,因为在以管理员权限运行
批处理文件,否则报WMI Operation failure: AccessDenied
注册tomcat
tomcat除上以winsw方式注册外,本身它就提供这注入服务方式
配置Tomcat环境变量
添加 TOMCAT_HOME 环境变量,也就是tomcat目录,D:\apache-tomcat-8.0.27
将变量添加到系统的path目录中,例如:%TOMCAT_HOME%\bin123
添加Tomcat服务
cmd命令行界面进入Tomcat解压目录的bin目录
安装tomcat服务运行:service.bat install
清除之前添加的tamcat:service remove tomcat8123456
启动Tomcat服务
# net start tomcat8 运行tomcat服务了,窗口关闭后,tomcat服务器一会一直运行
# net stop tomcat8 停止tomcat服务输入命令
# net start 查看运行的windows服务就可以查看运行的所有服务,如果tomcat服务在里面,说明tomcat服务正在运行
如果报拒绝访问的问题
window+x 使用管理员权限运行或者修改Tomcat文件夹权限允许Users完全控制、读取、写入的权限
注册redis
因为是可执行程序,所以我们也可以使用winsw包装一下做成win服务,但是redis本身就提供win服务,所以我们一般使用redis提供的方式注册服务。下载redis
配置
redis.windows-service.conf是当redis注册成windows服务时使用的配置。redis.windows.conf是普通命令行启动时需要的配置文件,不介绍具体配置,百度一下。
命令
进入redis安装包
注册服务:redis-server --service-install redis.windows-service.conf --loglevel verbose
启动服务:redis-server --service-start
停止服务:redis-server --service-stop
卸载服务:redis-server.exe --service-uninstall
当然如果我们用net start/stop 服务名
操作服务也可以