windows注册多个Tomcat Service
2. 原理说明
在windows中,可以使用 prunsrv.exe来注册、管理 windows service.
Tomcat 中:
| 文件 | 实际程序 | |
|---|---|---|
| Tomcat9.exe | prunsrv.exe | 用来注册、管理service 的程序 |
| Tomcat9w.exe | prunmgr.exe | prunsrv.exe 对应的图形化界面管理程序。 |
实际上:
text
Tomcat9.exe
本质就是:
text
prunsrv.exe
它支持:
text
根据 EXE 文件名自动识别 Service Name
例如:
text
webapp.exe
默认:
text
Service Name = webapp
这是 Procrun 的特性。
官方文档:
https://commons.apache.org/proper/commons-daemon/procrun.html
3. 环境示例
| 项目 | 路径 |
|---|---|
| Tomcat | D:\Tomcat9 |
| Java | D:\Java\jdk1.8 |
| Service Name | webapp |
Tomcat目录:
text
D:\Tomcat9
├── bin
├── conf
├── logs
├── webapps
4. 修改 EXE 文件名
进入:
text
D:\Tomcat9\bin
原文件:
text
Tomcat9.exe
复制并改名:
text
webapp.exe
最终:
text
D:\Tomcat9\bin\webapp.exe
5. 删除旧服务(可选)
如果之前安装过:
text
Tomcat9
先删除:
cmd
sc stop Tomcat9
sc delete Tomcat9
或者:
cmd
Tomcat9.exe //DS//Tomcat9
6. 注册 webapp Service
进入:
cmd
cd D:\Tomcat9\bin
执行:
cmd
webapp.exe //IS//webapp ^
--Jvm="D:\Java\jdk1.8\jre\bin\server\jvm.dll" ^
--Classpath="D:\Tomcat9\bin\bootstrap.jar;D:\Tomcat9\bin\tomcat-juli.jar" ^
--StartMode=Java ^
--StartClass=org.apache.catalina.startup.Bootstrap ^
--StartParams=start ^
--StopMode=Java ^
--StopClass=org.apache.catalina.startup.Bootstrap ^
--StopParams=stop
上面是:
text
最小可运行配置
其中真正必须的核心参数只有:
| 参数 | 是否必须 | 作用 |
|---|---|---|
| //IS// | 必须 | 安装服务 |
| --Jvm | 必须 | 指定 JVM |
| --Classpath | 必须 | Tomcat 启动 jar |
| --StartMode | 必须 | Java 模式 |
| --StartClass | 必须 | 启动类 |
| --StartParams | 基本必须 | start |
| --StopMode | 建议 | 停止模式 |
| --StopClass | 建议 | 停止类 |
| --StopParams | 建议 | stop |
而下面这些:
cmd
--DisplayName
--Description
--Startup
--StdOutput
--StdError
--LogPath
--LogLevel
都属于:
text
增强配置
不是必须。
例如:
cmd
--DisplayName="webapp"
只是 Windows 服务显示名称。
cmd
--Description="Tomcat Web Application Service"
只是服务描述。
cmd
--Startup=auto
只是:
text
开机自动启动
不写的话默认通常是:
text
manual
cmd
--StdOutput=auto
--StdError=auto
只是:
text
输出日志重定向
不写也能运行。
cmd
--LogPath
--LogLevel
只是:
text
prunsrv 自身日志
不是 Tomcat 日志。
企业里实际上常见两种写法:
1. 极简写法(开发环境)
cmd
webapp.exe //IS//webapp ^
--Jvm="D:\Java\jdk1.8\jre\bin\server\jvm.dll" ^
--Classpath="D:\Tomcat9\bin\bootstrap.jar;D:\Tomcat9\bin\tomcat-juli.jar" ^
--StartMode=Java ^
--StartClass=org.apache.catalina.startup.Bootstrap ^
--StartParams=start ^
--StopMode=Java ^
--StopClass=org.apache.catalina.startup.Bootstrap ^
--StopParams=stop
2. 生产环境完整写法(推荐)
cmd
webapp.exe //IS//webapp ^
--DisplayName="webapp" ^
--Description="Tomcat Web Application Service" ^
--Install="D:\Tomcat9\bin\webapp.exe" ^
--Startup=auto ^
--Jvm="D:\Java\jdk1.8\jre\bin\server\jvm.dll" ^
--Classpath="D:\Tomcat9\bin\bootstrap.jar;D:\Tomcat9\bin\tomcat-juli.jar" ^
--StartMode=Java ^
--StartClass=org.apache.catalina.startup.Bootstrap ^
--StartParams=start ^
--StopMode=Java ^
--StopClass=org.apache.catalina.startup.Bootstrap ^
--StopParams=stop ^
--StdOutput=auto ^
--StdError=auto ^
--LogPath="D:\Tomcat9\logs" ^
--LogLevel=Info
因为生产环境更关注:
- 自动启动
- 日志
- 运维可读性
- 服务描述
- 故障排查
- 输出重定向
所以参数会更多。
7. 参数说明
//IS//
安装 Windows Service。
--Install
指定:
text
当前 service 使用哪个 exe
这里:
cmd
--Install="D:\Tomcat9\bin\webapp.exe"
表示:
text
service 使用 webapp.exe 启动
--Jvm
指定:
text
jvm.dll
例如:
text
D:\Java\jdk1.8\jre\bin\server\jvm.dll
注意:
不要写:
text
java.exe
必须是:
text
jvm.dll
--Classpath
Tomcat 启动必须:
text
bootstrap.jar
tomcat-juli.jar
--StartClass
Tomcat 启动类:
text
org.apache.catalina.startup.Bootstrap
--StartParams
text
start
等价于:
text
startup.bat
--StopParams
text
stop
等价于:
text
shutdown.bat
8. 启动 Service
安装后:
cmd
net start webapp
或者:
cmd
sc start webapp
9. 停止 Service
cmd
net stop webapp
或者:
cmd
sc stop webapp
10. 查看 Windows Service
打开:
cmd
services.msc
会看到:
text
webapp
11. 查看 Service 配置
执行:
cmd
sc qc webapp
查看:
text
BINARY_PATH_NAME
例如:
text
D:\Tomcat9\bin\webapp.exe
12. 查看当前 Procrun 配置
执行:
cmd
webapp.exe //PS//
会输出:
text
--Jvm
--Classpath
--StartClass
等当前配置。
13. 使用 GUI 修改配置(可选)
如果需要 GUI:
复制:
text
Tomcat9w.exe
改名:
text
webappw.exe
然后:
cmd
webappw.exe //ES//webapp
即可打开:
- JVM配置
- Java内存
- 日志配置
- 启动参数
GUI界面。
14. 多 Tomcat 服务示例
企业常见:
| Service | Port |
|---|---|
| webapp | 8080 |
| oa | 8090 |
| erp | 8100 |
每个:
- 独立 Service
- 独立 JVM
- 独立 logs
- 独立 conf
15. 推荐目录结构
text
D:\
├── Java\
├── nginx\
├── Tomcat_webapp\
├── Tomcat_oa\
├── Tomcat_erp\
17. 常见问题
17.1 服务启动失败
检查:
text
logs
目录。
17.2 端口占用
检查:
cmd
netstat -ano | findstr 8080
17.3 JVM路径错误
必须:
text
jvm.dll
不是:
text
java.exe
17.4 服务无法停止
可能:
- shutdown port冲突
- JVM卡死
- Java线程未退出
查看:
text
catalina.out
或者:
text
stderr
日志。
18. 删除 Service
cmd
webapp.exe //DS//webapp
或者:
cmd
sc delete webapp
推荐:
cmd
//DS//
因为会清理:
text
Procrun 注册信息
19. 总结
| 文件 | 作用 |
|---|---|
| webapp.exe | prunsrv.exe改名 |
| webappw.exe | prunmgr.exe改名 |
核心原理:
text
Procrun 根据 EXE 名识别 Service Name
例如:
text
webapp.exe
默认:
text
Service Name = webapp