windows运行多个Tomcat Service

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
相关推荐
用户4682557459133 小时前
Testcontainers 在 Windows Docker Desktop 上跑不通:协议层不兼容 + 4 种可行环境
java·后端
程序员小羊!3 小时前
12.Java 多线程编程
java·开发语言
xuhaoyu_cpp_java3 小时前
项目学习(三)代码生成器
java·经验分享·笔记·学习
乐观勇敢坚强的老彭3 小时前
C++信息学奥赛lesson1
java·开发语言·c++
San813_LDD3 小时前
[深度学习] 数据序列化格式对比:以日志级别配置为例
xml·java·前端
github_czy3 小时前
更加优雅的类型检查与传参---mcp源码分析
java·服务器·开发语言
专注_每天进步一点点3 小时前
IDEA中,Apifox Helper 的 2.0.15-243版本的插件 导出指定的接口,入参的中文名为空,描述为空
java·ide·intellij-idea
兰令水4 小时前
leecodecode【区间DP+树形DP】【2026.6.10打卡-java版本】
java·算法·leetcode
小刘|4 小时前
Spring WebFlux + AI 流式输出深度解析:Spring AI 与 LangChain4j 效果差异溯源
java·后端·spring
Arvin.Angela4 小时前
Maven 的基本配置操作
java·maven