Windows 服务指南

目录

Tomcat 监控应用程序

Tomcat10w 是一个用于监控和配置 Tomcat 服务的 GUI 应用程序。

命令行指令

每个命令行指令都采用 //XX[//ServiceName] 的形式。

如果省略 //ServiceName 部分,则服务名称将假定为文件名减去 w 后缀。因此,默认服务名称为 Tomcat10

可用的命令行指令是

//ES 编辑服务配置 这是默认操作。如果没有提供选项,则会调用它。启动 GUI 应用程序,允许修改、启动和停止服务配置。
//MS 监控服务 启动 GUI 应用程序并将其最小化到系统托盘。
//MR 监控并运行服务 启动 GUI 应用程序并将其最小化到系统托盘。如果服务当前未运行,则启动服务。
//MQ 监控退出 停止任何正在运行的服务监控。

Tomcat 服务应用程序

Tomcat10 是一个服务应用程序,用于将 Tomcat 10 作为 Windows 服务运行。

命令行指令

每个命令行指令都采用 //XX[//ServiceName] 的形式。

可用的命令行指令是

//TS 以控制台应用程序运行服务 这是默认操作。如果没有提供选项,则会调用它。ServiceName 是可执行文件名称,不带 exe 后缀,即 Tomcat10
//RS 运行服务 仅从 ServiceManager 调用
//ES 启动(执行)服务
//SS 停止服务
//US 更新服务参数
//IS 安装服务
//DS 删除服务 如果服务正在运行,则停止服务
//PS 打印服务 打印用于(重新)创建当前配置的命令
//PP[//seconds] 暂停服务 默认值为 60 秒
//VS 版本 打印版本并退出
//? 帮助 打印用法并退出

命令行参数

每个命令行参数都以 -- 为前缀。如果命令行参数以 ++ 为前缀,并且该参数支持多个值,则其值将附加到现有选项。在下表中,支持多个值的参数以 ++ 为前缀。

如果环境变量与命令行参数同名,但以 PR_ 为前缀,则它将优先使用。例如

set PR_CLASSPATH=xx.jar

等效于提供

--Classpath=xx.jar

作为命令行参数。

参数名称 默认值 描述
--Description 服务名称描述(最大 1024 个字符)
--DisplayName ServiceName 服务显示名称
--Install procrun.exe //RS//ServiceName 安装映像
--Startup manual 服务启动模式可以是 automanual
++DependsOn 此服务依赖的服务列表。依赖的服务使用 #; 字符分隔。
++Environment 将以 key=value 形式提供给服务的环境变量列表。它们使用 #; 字符分隔。如果您需要在值中使用 #; 字符,则整个值必须用单引号括起来。
--User 用于运行可执行文件的用户帐户。它仅用于 StartMode javaexe,并允许在没有 LogonAsService 权限的帐户下运行应用程序作为服务。
--Password 由 --User 参数设置的用户帐户密码
--ServiceUser 指定服务运行的帐户名称。使用 DomainName\UserName 格式的帐户名。服务进程将以该用户身份登录。如果帐户属于内置域,则可以指定 .\UserName。请注意,服务控制管理器不接受标准名称的本地化形式,因此要使用它们,您需要分别指定 NT Authority\LocalServiceNT Authority\NetworkServiceLocalSystem
--ServicePassword 由 --ServiceUser 参数设置的用户帐户密码
--LibraryPath 添加到搜索路径的目录,用于查找 JVM 的 DLL。此目录既添加到 PATH 环境变量的前面,也作为 SetDLLDirectory 函数的参数。
--JavaHome JAVA_HOME 设置与 JAVA_HOME 环境变量定义不同的 JAVA_HOME
--Jvm auto 使用 auto(即从 Windows 注册表中查找 JVM)或指定 jvm.dll 的完整路径。您可以在此处使用环境变量扩展。
++JvmOptions -Xrs -D-X 形式传递给 JVM 的选项列表。选项使用 #; 字符分隔。如果需要嵌入 #; 字符,请将它们放在单引号内。(在 exe 模式下不使用。)
++JvmOptions9 在 Java 9 或更高版本上运行时,以 -D-X 形式传递给 JVM 的选项列表。选项使用 #; 字符分隔。如果需要嵌入 #; 字符,请将它们放在单引号内。(在 exe 模式下不使用。)
--Classpath 设置 Java 类路径。(在 exe 模式下不使用。)
--JvmMs 初始内存池大小(以 MiB 为单位)。(在 exe 模式下不使用。)
--JvmMx 最大内存池大小(以 MiB 为单位)。(在 exe 模式下不使用。)
--JvmSs 线程堆栈大小(以 KiB 为单位)。(在 exe 模式下不使用。)
--StartMode jvmJavaexe 之一。模式如下:
  • jvm - 在进程内启动 Java。依赖于 jvm.dll,请参见 --Jvm
  • Java - 与 exe 相同,但自动使用默认的 Java 可执行文件,即 %JAVA_HOME%\bin\java.exe。确保正确设置了 JAVA_HOME,或使用 --JavaHome 提供正确的路径。如果两者都没有设置,procrun 将尝试从 Windows 注册表中查找默认的 JDK(而不是 JRE)。
  • exe - 将映像作为单独的进程运行
--StartImage 将要运行的可执行文件。仅适用于exe模式。
--StartPath 启动映像可执行文件的运行路径。
--StartClass Main 包含启动方法的类。适用于jvmJava模式。(在exe模式中不使用。)
--StartMethod main 如果方法名称与main不同,则为方法名称
++StartParams 将传递给StartImage或StartClass的参数列表。参数使用#;字符分隔。
--StopMode jvmJavaexe之一。有关详细信息,请参阅--StartMode
--StopImage 在停止服务信号时将运行的可执行文件。仅适用于exe模式。
--StopPath 停止映像可执行文件的运行路径。不适用于jvm模式。
--StopClass Main 在停止服务信号时将使用的类。适用于jvmJava模式。
--StopMethod main 如果方法名称与main不同,则为方法名称
--StopParams 将传递给StopImage或StopClass的参数列表。参数使用#;字符分隔。
++StopTimeout 无超时 定义procrun等待服务正常退出所需的超时时间(以秒为单位)。
--LogPath %SystemRoot%\System32\LogFiles\Apache 定义日志记录的路径。如果需要,将创建目录。
--LogPrefix commons-daemon 定义服务日志文件名前缀。日志文件在LogPath目录中创建,后缀为.YEAR-MONTH-DAY.log
--LogLevel Info 定义日志记录级别,可以是ErrorInfoWarnDebug。(不区分大小写)。
--LogJniMessages 0 将此值设置为非零值(例如 1)以在procrun日志文件中捕获JVM jni调试消息。如果使用stdout/stderr重定向,则不需要此值。仅适用于jvm模式。
--StdOutput 重定向的stdout文件名。如果命名为auto,则文件将在LogPath中创建,名称为service-stdout.YEAR-MONTH-DAY.log
--StdError 重定向的stderr文件名。如果命名为auto,则文件将在LogPath中创建,名称为service-stderr.YEAR-MONTH-DAY.log
--PidFile 定义用于存储正在运行的进程ID的文件名。实际文件将在LogPath目录中创建

安装服务

手动安装服务最安全的方法是使用提供的service.bat脚本。运行此脚本需要管理员权限。如果需要,可以使用/user开关指定用于安装服务的用户。

注意:如果启用了用户帐户控制 (UAC),则脚本启动“Tomcat10.exe”时,系统会提示您提供其他权限。
如果要将其他选项作为PR_*环境变量传递给服务安装程序,则必须在操作系统中全局配置这些选项,或者以提升的权限启动设置这些选项的程序(例如,右键单击cmd.exe并选择“以管理员身份运行”;在Windows 8(或更高版本)或Windows Server 2012(或更高版本)上,您可以从资源管理器中通过单击“文件”菜单栏来打开当前目录的提升的命令提示符)。有关详细信息,请参阅问题56143

Install the service named 'Tomcat10'
C:\> service.bat install

存在一个可选的第二个参数,允许您指定服务的名称,该名称将显示在 Windows 服务中。

Install the service named 'MyService'
C:\> service.bat install MyService

当使用非默认名称安装服务时,tomcat10.exe 和 tomcat10w.exe 可能会被重命名以匹配所选的服务名称。要执行此操作,请使用 `--rename` 选项。

Install the service named 'MyService' with renaming
C:\> service.bat install MyService --rename

如果使用 tomcat10.exe,则需要使用 **//IS** 参数。

Install the service named 'Tomcat10'
C:\> tomcat10 //IS//Tomcat10 --DisplayName="Apache Tomcat 10" ^
     --Install="C:\Program Files\Tomcat\bin\tomcat10.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 'Tomcat10'
C:\> tomcat10 //US//Tomcat10 --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:\> tomcat10 //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 'Tomcat10'
C:\> tomcat10 //DS//Tomcat10

如果您为服务指定了可选名称,则需要像这样指定它。

Remove the service named 'MyService'
C:\> tomcat10 //DS//MyService

调试服务

要在控制台模式下运行服务,您需要使用 **//TS** 参数。可以通过按下 **CTRL+C** 或 **CTRL+BREAK** 来启动服务关闭。如果您将 tomcat10.exe 重命名为 testservice.exe,那么您只需执行 testservice.exe,此命令模式将默认执行。

Run the service named 'Tomcat10' in console mode
C:\> tomcat10 //TS//Tomcat10 [additional arguments]
Or simply execute:
C:\> tomcat10

多个实例

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_10
set CATALINA_BASE=c:\tomcat_10\instances\instance1
service.bat install instance1

要修改服务设置,您可以运行 **tomcat10w //ES//instance1**。

对于其他实例,创建其他实例文件夹,更新 CATALINA_BASE 环境变量,然后再次运行 "service.bat install"。

set CATALINA_BASE=c:\tomcat_10\instances\instance2
service.bat install instance2