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