Windows 服務操作指南

目錄

Tomcat 監視應用程式

Tomcat10w 是用於監控和設定 Tomcat 服務的 GUI 應用程式。

命令列指令

每個命令列指令的格式為 //XX[//服務名稱]

如果省略 //服務名稱 元件,則服務名稱會假設為檔案名稱減去 w 字尾。因此,預設服務名稱為 Tomcat10

可用的命令列指令如下

//ES 編輯服務設定 這是預設作業。如果未提供選項,就會呼叫它。啟動 GUI 應用程式,讓你可以修改、啟動和停止服務設定。
//MS 監控服務 啟動 GUI 應用程式,並將它最小化到系統匣。
//MR 監控並執行服務 啟動 GUI 應用程式,並將它最小化到系統匣。如果服務目前未執行,則啟動它。
//MQ 監控結束 停止服務的任何執行中監控。

Tomcat 服務應用程式

Tomcat10 是用於以 Windows 服務執行 Tomcat 10 的服務應用程式。

命令列指令

每個命令列指令的格式為 //XX[//服務名稱]

可用的命令列指令如下

//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 安裝映像
--啟動 手動 服務啟動模式可以是自動手動
++依賴 此服務所依賴的服務清單。依賴服務使用#;字元分隔
++環境 將以金鑰=值形式提供給服務的環境變數清單。它們使用#;字元分隔。如果您需要在值中使用#;字元,則必須將整個值用單引號括起來。
--使用者 用於執行可執行檔的使用者帳戶。它僅用於 StartMode javaexe,並允許在沒有 LogonAsService 權限的帳戶下以服務身分執行應用程式。
--密碼 --User 參數設定的使用者帳戶密碼
--服務使用者 指定服務應在其中執行的帳戶名稱。使用格式為網域名稱\使用者名稱的帳戶名稱。服務程序將以這個使用者身分登入。如果帳戶屬於內建網域,您可以指定.\使用者名稱。請注意,服務控制管理員不接受標準名稱的在地化形式,因此若要使用它們,您需要視情況指定NT Authority\LocalServiceNT Authority\NetworkServiceLocalSystem
--服務密碼 --ServiceUser 參數設定的使用者帳戶密碼
--程式庫路徑 目錄新增至用於尋找 JVM 的 DLL 的搜尋路徑。此目錄新增至PATH環境變數之前,並作為SetDLLDirectory函數的參數。
--JavaHome JAVA_HOME 設定不同於 JAVA_HOME 環境變數所定義的 JAVA_HOME
--Jvm 自動 使用自動(即從 Windows 登錄檔中尋找 JVM)或指定jvm.dll的完整路徑。您可以在這裡使用環境變數擴充。
++JvmOptions -Xrs -D-X形式的選項清單,將傳遞給 JVM。選項使用#;字元分隔。如果您需要嵌入#;字元,請將它們放在單引號內。(在exe模式中未使用。)
++JvmOptions9 -D-X形式的選項清單,在 Java 9 或更新版本上執行時將傳遞給 JVM。選項使用#;字元分隔。如果您需要嵌入#;字元,請將它們放在單引號內。(在exe模式中未使用。)
--Classpath 設定 Java classpath。(在 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 資訊 定義記錄等級,可以是 錯誤資訊警告偵錯。(不分大小寫)
--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.dev.org.tw/ " ^
     --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.dev.org.tw/ " ^
     --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+CCTRL+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/port 組合上執行多個執行個體,或安裝多個 Tomcat 版本,每個版本在不同的 IP/port 上執行一個或多個執行個體。

每個執行個體資料夾需要下列結構

  • 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/port。找到包含 <Connector port="8080" ... 的行,並新增一個 address 屬性,或更新 port 號碼,以指定唯一的 IP/port 組合。

要安裝執行個體,首先將 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