Windows 服务操作指南
目录
Tomcat 监控应用程序
Tomcat11w 是一个用于监控和配置 Tomcat 服务的 GUI 应用程序。
命令行指令
每个命令行指令都采用 //XX[//ServiceName]
的形式
如果省略 //ServiceName
组件,则服务名称被假定为文件名减去 'w' 后缀。因此默认服务名称为 Tomcat11
。
可用的命令行指令有:
//ES | 编辑服务配置 | 这是默认操作。如果未提供任何选项,则调用此操作。启动 GUI 应用程序,允许修改、启动和停止服务配置。 |
//MS | 监控服务 | 启动 GUI 应用程序并将其最小化到系统托盘。 |
//MR | 监控并运行服务 | 启动 GUI 应用程序并将其最小化到系统托盘。如果服务当前未运行,则启动服务。 |
//MQ | 退出监控 | 停止服务的任何正在运行的监控程序。 |
Tomcat 服务应用程序
Tomcat11 是一个用于将 Tomcat 11 作为 Windows 服务运行的服务应用程序。
命令行指令
每个命令行指令都采用 //XX[//ServiceName]
的形式
可用的命令行指令有:
//TS | 将服务作为控制台应用程序运行 | 这是默认操作。如果未提供任何选项,则调用此操作。ServiceName 是不带 exe 后缀的可执行文件名称,即 Tomcat11。 |
//RS | 运行服务 | 仅由 ServiceManager 调用 |
//ES | 启动(执行)服务 | |
//SS | 停止服务 | |
//US | 更新服务参数 | |
//IS | 安装服务 | |
//DS | 删除服务 | 如果服务正在运行,则停止它 |
//PS | 打印服务 | 打印用于(重新)创建当前配置的命令 |
//PP[//秒] | 暂停服务 | 默认值为 60 秒 |
//VS | 版本 | 打印版本并退出 |
//? | 帮助 | 打印用法并退出 |
命令行参数
每个命令行参数都以 --
为前缀。如果命令行参数以 ++
为前缀,并且该参数支持多个值,则其值将附加到现有选项中。下表中,支持多个值的参数以 ++
为前缀。
如果存在与命令行参数同名但以 PR_
为前缀的环境变量,则该变量将优先。例如:
set PR_CLASSPATH=xx.jar
等同于提供
--Classpath=xx.jar
作为命令行参数。
参数名称 | 默认值 | 描述 |
---|---|---|
--Description | 服务名称描述(最多 1024 个字符) | |
--DisplayName | ServiceName | 服务显示名称 |
--Install | procrun.exe //RS//ServiceName | 安装镜像 |
--Startup | manual | 服务启动模式可以是自动 (auto) 或 手动 (manual) |
++DependsOn | 此服务依赖的服务列表。依赖的服务使用 # 或 ; 字符分隔 | |
++Environment | 将以 key=value 形式提供给服务的环境变量列表。它们使用 # 或 ; 字符分隔。如果需要在值中使用 # 或 ; 字符,则整个值必须用单引号括起来。 | |
--User | 用于运行可执行文件的用户帐户。仅用于 StartMode java 或 exe,并允许在没有“作为服务登录”权限的帐户下将应用程序作为服务运行。 | |
--Password | --User 参数设置的用户帐户的密码 | |
--ServiceUser | 指定服务应在其下运行的帐户名称。使用 DomainName\UserName 形式的帐户名。服务进程将以此用户身份登录。如果帐户属于内置域,您可以指定 .\UserName 。请注意,服务控制管理器不接受标准名称的本地化形式,因此要使用它们,您需要根据需要指定 NT Authority\LocalService 、NT Authority\NetworkService 或 LocalSystem 。 |
|
--ServicePassword | --ServiceUser 参数设置的用户帐户的密码 | |
--LibraryPath | 添加到搜索路径的目录,用于定位 JVM 的 DLL。此目录既添加在 PATH 环境变量之前,也作为 SetDLLDirectory 函数的参数。 |
|
--JavaHome | JAVA_HOME | 设置一个不同于 JAVA_HOME 环境变量中定义的 JAVA_HOME |
--Jvm | auto | 使用 自动 (auto)(即从 Windows 注册表中查找 JVM)或指定 jvm.dll 的完整路径。您可以在此处使用环境变量扩展。 |
++JvmOptions | -Xrs | 将传递给 JVM 的 -D 或 -X 形式的选项列表。选项使用 # 或 ; 字符分隔。如果需要嵌入 # 或 ; 字符,请将它们放在单引号内。(在 exe 模式下不使用。) |
++JvmOptions9 | 在 Java 9 或更高版本上运行时将传递给 JVM 的 -D 或 -X 形式的选项列表。选项使用 # 或 ; 字符分隔。如果需要嵌入 # 或 ; 字符,请将它们放在单引号内。(在 exe 模式下不使用。) | |
--Classpath | 设置 Java classpath。(在 exe 模式下不使用。) | |
--JvmMs | 初始内存池大小,单位 MiB。(在 exe 模式下不使用。) | |
--JvmMx | 最大内存池大小,单位 MiB。(在 exe 模式下不使用。) | |
--JvmSs | 线程堆栈大小,单位 KiB。(在 exe 模式下不使用。) | |
--StartMode | jvm、Java 或 exe 之一。模式有:
|
|
--StartImage | 将运行的可执行文件。仅适用于 exe 模式。 | |
--StartPath | 启动映像可执行文件的工作路径。 | |
--StartClass | Main | 包含启动方法的类。适用于 jvm 和 Java 模式。(在 exe 模式下不使用。) |
--StartMethod | main | 如果方法名不同于 main |
++StartParams | 将传递给 StartImage 或 StartClass 的参数列表。参数使用 # 或 ; 字符分隔。 | |
--StopMode | jvm、Java 或 exe 之一。详见 --StartMode。 | |
--StopImage | 在接收到停止服务信号时将运行的可执行文件。仅适用于 exe 模式。 | |
--StopPath | 停止映像可执行文件的工作路径。不适用于 jvm 模式。 | |
--StopClass | Main | 在接收到停止服务信号时将使用的类。适用于 jvm 和 Java 模式。 |
--StopMethod | main | 如果方法名不同于 main |
--StopParams | 将传递给 StopImage 或 StopClass 的参数列表。参数使用 # 或 ; 字符分隔。 | |
++StopTimeout | 无超时 | 定义 procrun 等待服务优雅退出的超时时间(秒)。 |
--LogPath | %SystemRoot%\System32\LogFiles\Apache | 定义日志路径。如果需要,则创建目录。 |
--LogPrefix | commons-daemon | 定义服务日志文件名前缀。日志文件在 LogPath 目录中创建,带有 .YEAR-MONTH-DAY.log 后缀。 |
--LogLevel | Info | 定义日志级别,可以是 Error (错误)、Info (信息)、Warn (警告) 或 Debug (调试)。(不区分大小写)。 |
--LogJniMessages | 0 | 将其设置为非零值(例如 1)以在 procrun 日志文件中捕获 JVM JNI 调试消息。如果正在使用 stdout/stderr 重定向,则不需要。仅适用于 jvm 模式。 |
--StdOutput | 重定向的标准输出文件名。如果命名为 auto,则文件将在 LogPath 内创建,名称为 service-stdout.YEAR-MONTH-DAY.log。 | |
--StdError | 重定向的标准错误文件名。如果命名为 auto,则文件将在 LogPath 内创建,名称为 service-stderr.YEAR-MONTH-DAY.log。 | |
--PidFile | 定义用于存储正在运行的进程 ID 的文件名。实际文件将在 LogPath 目录中创建。 |
安装服务
手动安装服务最安全的方法是使用提供的 service.bat 脚本。运行此脚本需要管理员权限。如有必要,您可以使用 /user
开关来指定用于安装服务的用户。
注意:如果用户帐户控制 (UAC) 已启用,当脚本启动 'Tomcat11.exe' 时,系统将要求您提供额外的权限。
如果您想将额外选项作为 PR_*
环境变量传递给服务安装程序,您必须要么在操作系统中全局配置它们,要么以提升的权限启动设置它们的程序(例如,右键单击 cmd.exe 并选择“以管理员身份运行”;在 Windows 8(或更高版本)或 Windows Server 2012(或更高版本)上,您可以通过在资源管理器中单击“文件”菜单栏来打开当前目录的提升权限命令提示符)。有关详细信息,请参阅问题 56143。
Install the service named 'Tomcat11'
C:\> service.bat install
还有一个可选的第二个参数,允许您指定服务名称,该名称将显示在 Windows 服务中。
Install the service named 'MyService'
C:\> service.bat install MyService
当使用非默认名称安装服务时,tomcat11.exe 和 tomcat11w.exe 可能会被重命名以匹配所选的服务名称。为此,请使用 --rename
选项。
Install the service named 'MyService' with renaming
C:\> service.bat install MyService --rename
如果使用 tomcat11.exe,您需要使用 //IS 参数。
Install the service named 'Tomcat11'
C:\> tomcat11 //IS//Tomcat11 --DisplayName="Apache Tomcat 11" ^
--Install="C:\Program Files\Tomcat\bin\tomcat11.exe" --Jvm=auto ^
--StartMode=jvm --StopMode=jvm ^
--StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start ^
--StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop
更新服务
要更新服务参数,您需要使用 //US 参数。
Update the service named 'Tomcat11'
C:\> tomcat11 //US//Tomcat11 --Description="Apache Tomcat Server - https://tomcat.ac.cn/ " ^
--Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar
如果您为服务指定了可选名称,则需要像这样指定它
Update the service named 'MyService'
C:\> tomcat11 //US//MyService --Description="Apache Tomcat Server - https://tomcat.ac.cn/ " ^
--Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar
删除服务
要删除服务,您需要使用 //DS 参数。
如果服务正在运行,它将被停止然后删除。
Remove the service named 'Tomcat11'
C:\> tomcat11 //DS//Tomcat11
如果您为服务指定了可选名称,则需要像这样指定它
Remove the service named 'MyService'
C:\> tomcat11 //DS//MyService
调试服务
要在控制台模式下运行服务,您需要使用 //TS 参数。服务可以通过按下 CTRL+C 或 CTRL+BREAK 来关闭。如果您将 tomcat11.exe 重命名为 testservice.exe,那么您只需执行 testservice.exe,此命令模式将默认执行。
Run the service named 'Tomcat11' in console mode
C:\> tomcat11 //TS//Tomcat11 [additional arguments]
Or simply execute:
C:\> tomcat11
多实例
Tomcat 支持安装多个实例。您可以只有一个 Tomcat 安装,但有多个实例运行在不同的 IP/端口组合上,或者有多个 Tomcat 版本,每个版本都在不同的 IP/端口上运行一个或多个实例。
每个实例文件夹需要以下结构:
- conf
- logs
- temp
- webapps
- work
至少,conf 目录应包含 CATALINA_HOME\conf\ 中以下文件的副本。任何未复制和编辑的文件将默认从 CATALINA_HOME\conf 中获取,即 CATALINA_BASE\conf 中的文件会覆盖 CATALINA_HOME\conf 中的默认设置。
- server.xml
- web.xml
您必须编辑 CATALINA_BASE\conf\server.xml 以指定实例监听的唯一 IP/端口。找到包含 <Connector port="8080" ...
的行,并添加一个地址属性和/或更新端口号,以便指定唯一的 IP/端口组合。
要安装一个实例,首先将 CATALINA_HOME 环境变量设置为 Tomcat 安装目录的名称。然后创建第二个环境变量 CATALINA_BASE 并将其指向实例文件夹。然后运行 "service.bat install" 命令并指定服务名称。
set CATALINA_HOME=c:\tomcat_11
set CATALINA_BASE=c:\tomcat_11\instances\instance1
service.bat install instance1
要修改服务设置,您可以运行 tomcat11w //ES//instance1。
对于其他实例,创建额外的实例文件夹,更新 CATALINA_BASE 环境变量,然后再次运行 "service.bat install"。
set CATALINA_BASE=c:\tomcat_11\instances\instance2
service.bat install instance2