488 lines
16 KiB
XML
488 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
<!DOCTYPE document [
|
|
<!ENTITY project SYSTEM "project.xml">
|
|
]>
|
|
<document url="windows-service-howto.html">
|
|
|
|
&project;
|
|
|
|
<properties>
|
|
<author email="mturk@apache.org">Mladen Turk</author>
|
|
<title>Windows Service How-To</title>
|
|
</properties>
|
|
|
|
<body>
|
|
|
|
<section name="Table of Contents">
|
|
<toc/>
|
|
</section>
|
|
|
|
<section name="Tomcat service application">
|
|
<p>
|
|
<b>Tomcat<version-major/></b> is a service application for running Tomcat
|
|
<version-major/> as a Windows service.
|
|
</p>
|
|
</section>
|
|
<section name="Tomcat monitor application">
|
|
<p>
|
|
<b>Tomcat<version-major/>w</b> is a GUI application for monitoring and
|
|
configuring Tomcat services.
|
|
</p>
|
|
<p>The available command line options are:</p>
|
|
|
|
<table class="defaultTable">
|
|
<tr><td><b>//ES//</b></td>
|
|
<td>Edit service configuration</td>
|
|
<td>This is the default operation. It is called if the no option is
|
|
provided but the executable is renamed to <b>servicenameW.exe</b></td>
|
|
</tr>
|
|
<tr><td><b>//MS//</b></td>
|
|
<td>Monitor service</td>
|
|
<td>Put the icon in the system tray</td>
|
|
</tr>
|
|
</table>
|
|
|
|
</section>
|
|
<section name="Command line arguments">
|
|
<p>
|
|
Each command line directive is in the form of <b>//XX//ServiceName</b>
|
|
</p>
|
|
<p>The available command line options are:</p>
|
|
|
|
<table class="defaultTable">
|
|
<tr><td><b>//TS//</b></td>
|
|
<td>Run the service as console application</td>
|
|
<td>This is the default operation. It is called if the no option is
|
|
provided. The ServiceName is the name of the executable without
|
|
exe suffix, meaning Tomcat<version-major/></td>
|
|
</tr>
|
|
<tr><td><b>//RS//</b></td>
|
|
<td>Run the service</td>
|
|
<td>Called only from ServiceManager</td>
|
|
</tr>
|
|
<tr><td><b>//SS//</b></td>
|
|
<td>Stop the service</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr><td><b>//US//</b></td>
|
|
<td>Update service parameters</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr><td><b>//IS//</b></td>
|
|
<td>Install service</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr><td><b>//DS//</b></td>
|
|
<td>Delete service</td>
|
|
<td>Stops the service if running</td>
|
|
</tr>
|
|
</table>
|
|
|
|
</section>
|
|
<section name="Command line parameters">
|
|
<p>
|
|
Each command line parameter is prefixed with <b>--</b>. If the command line
|
|
parameter is prefixed with <b>++</b> then it's value will be appended to the
|
|
existing option.
|
|
If the environment variable with the same name as command line parameter but
|
|
prefixed with <code>PR_</code> exists it will take precedence.
|
|
For example:</p>
|
|
<source>set PR_CLASSPATH=xx.jar</source>
|
|
|
|
<p>is equivalent to providing</p>
|
|
<source>--Classpath=xx.jar</source>
|
|
<p> as command line parameter.</p>
|
|
|
|
<table class="defaultTable">
|
|
<tr>
|
|
<th>ParameterName</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td>--Description</td>
|
|
<td></td>
|
|
<td>Service name description (maximum 1024 characters)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--DisplayName</td>
|
|
<td>ServiceName</td>
|
|
<td>Service display name</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--Install</td>
|
|
<td>procrun.exe //RS//ServiceName</td>
|
|
<td>Install image</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--Startup</td>
|
|
<td>manual</td>
|
|
<td>Service startup mode can be either <b>auto</b> or <b>manual</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>--DependsOn</td>
|
|
<td></td>
|
|
<td>List of services that this service depend on. Dependent services
|
|
are separated using either <b>#</b> or <b>;</b> characters</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--Environment</td>
|
|
<td></td>
|
|
<td>List of environment variables that will be provided to the service
|
|
in the form <b>key=value</b>. They are separated using either
|
|
<b>#</b> or <b>;</b> characters. If you need to use either the <b>#</b>
|
|
or <b>;</b> character within a value then the entire value must be
|
|
enclosed inside single quotes.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--User</td>
|
|
<td></td>
|
|
<td>User account used for running executable. It is used only for
|
|
StartMode <b>java</b> or <b>exe</b> and enables running applications
|
|
as service under account without LogonAsService privilege.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--Password</td>
|
|
<td></td>
|
|
<td>Password for user account set by --User parameter</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--JavaHome</td>
|
|
<td>JAVA_HOME</td>
|
|
<td>Set a different JAVA_HOME than defined by JAVA_HOME environment
|
|
variable</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--Jvm</td>
|
|
<td>auto</td>
|
|
<td>Use either <b>auto</b> (i.e. find the JVM from the Windows registry)
|
|
or specify the full path to the <b>jvm.dll</b>.
|
|
You can use the environment variable expansion here.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--JvmOptions</td>
|
|
<td>-Xrs</td>
|
|
<td>List of options in the form of <b>-D</b> or <b>-X</b> that will be
|
|
passed to the JVM. The options are separated using either
|
|
<b>#</b> or <b>;</b> characters. If you need to embed either <b>#</b> or
|
|
<b>;</b> characters, put them inside single quotes. (Not used in
|
|
<b>exe</b> mode.)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--JvmOptions9</td>
|
|
<td></td>
|
|
<td>List of options in the form of <b>-D</b> or <b>-X</b> that will be
|
|
passed to the JVM when running on Java 9 or later. The options are
|
|
separated using either <b>#</b> or <b>;</b> characters. If you need to
|
|
embed either <b>#</b> or <b>;</b> characters, put them inside single
|
|
quotes. (Not used in <b>exe</b> mode.)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--Classpath</td>
|
|
<td></td>
|
|
<td>Set the Java classpath. (Not used in <b>exe</b> mode.)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--JvmMs</td>
|
|
<td></td>
|
|
<td>Initial memory pool size in MB. (Not used in <b>exe</b> mode.)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--JvmMx</td>
|
|
<td></td>
|
|
<td>Maximum memory pool size in MB. (Not used in <b>exe</b> mode.)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--JvmSs</td>
|
|
<td></td>
|
|
<td>Thread stack size in KB. (Not used in <b>exe</b> mode.)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StartMode</td>
|
|
<td></td>
|
|
<td>One of <b>jvm</b>, <b>Java</b> or <b>exe</b>. The modes are:
|
|
<ul>
|
|
<li>jvm - start Java in-process. Depends on jvm.dll, see <b>--Jvm</b>.</li>
|
|
<li>Java - same as exe, but automatically uses the default Java
|
|
executable, i.e. %JAVA_HOME%\bin\java.exe. Make sure JAVA_HOME is set
|
|
correctly, or use --JavaHome to provide the correct location.
|
|
If neither is set, procrun will try to find the default JDK (not JRE)
|
|
from the Windows registry.</li>
|
|
<li>exe - run the image as a separate process</li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StartImage</td>
|
|
<td></td>
|
|
<td>Executable that will be run. Only applies to <b>exe</b> mode.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StartPath</td>
|
|
<td></td>
|
|
<td>Working path for the start image executable.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StartClass</td>
|
|
<td>Main</td>
|
|
<td>Class that contains the startup method. Applies to the <b>jvm</b> and
|
|
<b>Java</b> modes. (Not used in <b>exe</b> mode.) </td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StartMethod</td>
|
|
<td>main</td>
|
|
<td>Method name if differs then main</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StartParams</td>
|
|
<td></td>
|
|
<td>List of parameters that will be passed to either StartImage or
|
|
StartClass. Parameters are separated using either <b>#</b> or
|
|
<b>;</b> character.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StopMode</td>
|
|
<td></td>
|
|
<td>One of <b>jvm</b>, <b>Java</b> or <b>exe</b>. See <b>--StartMode</b>
|
|
for further details. </td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StopImage</td>
|
|
<td></td>
|
|
<td>Executable that will be run on Stop service signal. Only applies to
|
|
<b>exe</b> mode.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StopPath</td>
|
|
<td></td>
|
|
<td>Working path for the stop image executable. Does not apply to <b>jvm</b>
|
|
mode.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StopClass</td>
|
|
<td>Main</td>
|
|
<td>Class that will be used on Stop service signal. Applies to the
|
|
<b>jvm</b> and <b>Java</b> modes. </td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StopMethod</td>
|
|
<td>main</td>
|
|
<td>Method name if differs then main</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StopParams</td>
|
|
<td></td>
|
|
<td>List of parameters that will be passed to either StopImage or
|
|
StopClass. Parameters are separated using either <b>#</b> or
|
|
<b>;</b> character.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StopTimeout</td>
|
|
<td>No Timeout</td>
|
|
<td>Defines the timeout in seconds that procrun waits for service to
|
|
exit gracefully.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--LogPath</td>
|
|
<td>%SystemRoot%\System32\LogFiles\Apache</td>
|
|
<td>Defines the path for logging. Creates the directory if necessary.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--LogPrefix</td>
|
|
<td>commons-daemon</td>
|
|
<td>Defines the service log filename prefix. The log file is created in the
|
|
LogPath directory with <code>.YEAR-MONTH-DAY.log</code> suffix</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--LogLevel</td>
|
|
<td>Info</td>
|
|
<td>Defines the logging level and can be either <b>Error</b>,
|
|
<b>Info</b>, <b>Warn</b> or <b>Debug</b>. (Case insensitive).</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StdOutput</td>
|
|
<td></td>
|
|
<td>Redirected stdout filename.
|
|
If named <b>auto</b> then file is created inside <b>LogPath</b> with the
|
|
name <b>service-stdout.YEAR-MONTH-DAY.log</b>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--StdError</td>
|
|
<td></td>
|
|
<td>Redirected stderr filename.
|
|
If named <b>auto</b> then file is created inside <b>LogPath</b> with the
|
|
name <b>service-stderr.YEAR-MONTH-DAY.log</b>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>--PidFile</td>
|
|
<td></td>
|
|
<td>Defines the file name for storing the running process id. Actual file is
|
|
created in the <b>LogPath</b> directory</td>
|
|
</tr>
|
|
</table>
|
|
|
|
</section>
|
|
<section name="Installing services">
|
|
<p>
|
|
The safest way to manually install the service is to use the provided
|
|
<b>service.bat</b> script. Administrator privileges are required to run this
|
|
script. If necessary, you can use the <code>/user</code> switch to specify
|
|
a user to use for the installation of the service.
|
|
</p>
|
|
<p>
|
|
<strong>NOTE:</strong> If User Account Control (UAC) is enabled you will be
|
|
asked for additional privileges when 'Tomcat<version-major/>.exe' is launched by
|
|
the script.<br/>
|
|
If you want to pass additional options to service installer as
|
|
<code>PR_*</code> environment variables, you have to either configure them
|
|
globally in OS, or launch the program that sets them with elevated privileges
|
|
(e.g. right-click on cmd.exe and select "Run as administrator"; on Windows 8
|
|
(or later) or Windows Server 2012 (or later), you can open an elevated command
|
|
prompt for the current directory from the Explorer
|
|
by clicking on the "File" menu bar). See issue <bug>56143</bug> for details.
|
|
</p>
|
|
|
|
<source>Install the service named 'Tomcat<version-major/>'
|
|
C:\> service.bat install</source>
|
|
|
|
<p>There is a 2nd optional parameter that lets you specify the name of the
|
|
service, as displayed in Windows services.</p>
|
|
|
|
<source>Install the service named 'MyService'
|
|
C:\> service.bat install MyService</source>
|
|
|
|
<p>When installing the service with a non-default name,
|
|
tomcat<version-major/>.exe and tomcat<version-major/>w.exe may be renamed to
|
|
match the chosen service name. To do this, use the <code>--rename</code>
|
|
option.</p>
|
|
|
|
<source>Install the service named 'MyService' with renaming
|
|
C:\> service.bat install MyService --rename</source>
|
|
|
|
<p>
|
|
If using tomcat<version-major/>.exe, you need to use the <b>//IS//</b> parameter.</p>
|
|
|
|
<source>Install the service named 'Tomcat<version-major/>'
|
|
C:\> tomcat<version-major/> //IS//Tomcat<version-major/> --DisplayName="Apache Tomcat <version-major/>" ^
|
|
--Install="C:\Program Files\Tomcat\bin\tomcat<version-major/>.exe" --Jvm=auto ^
|
|
--StartMode=jvm --StopMode=jvm ^
|
|
--StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start ^
|
|
--StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop</source>
|
|
|
|
</section>
|
|
<section name="Updating services">
|
|
<p>
|
|
To update the service parameters, you need to use the <b>//US//</b> parameter.
|
|
</p>
|
|
|
|
<source>Update the service named 'Tomcat<version-major/>'
|
|
C:\> tomcat<version-major/> //US//Tomcat<version-major/> --Description="Apache Tomcat Server - https://tomcat.apache.org/ " ^
|
|
--Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar</source>
|
|
|
|
<p>If you gave the service an optional name, you need to specify it like this:
|
|
</p>
|
|
|
|
<source>Update the service named 'MyService'
|
|
C:\> tomcat<version-major/> //US//MyService --Description="Apache Tomcat Server - https://tomcat.apache.org/ " ^
|
|
--Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar</source>
|
|
|
|
</section>
|
|
<section name="Removing services">
|
|
<p>
|
|
To remove the service, you need to use the <b>//DS//</b> parameter.<br/>
|
|
If the service is running it will be stopped and then deleted.</p>
|
|
|
|
<source>Remove the service named 'Tomcat<version-major/>'
|
|
C:\> tomcat<version-major/> //DS//Tomcat<version-major/></source>
|
|
|
|
<p>If you gave the service an optional name, you need to specify it like this:
|
|
</p>
|
|
|
|
<source>Remove the service named 'MyService'
|
|
C:\> tomcat<version-major/> //DS//MyService</source>
|
|
|
|
</section>
|
|
<section name="Debugging services">
|
|
<p>
|
|
To run the service in console mode, you need to use the <b>//TS//</b> parameter.
|
|
The service shutdown can be initiated by pressing <b>CTRL+C</b> or
|
|
<b>CTRL+BREAK</b>.
|
|
If you rename the tomcat<version-major/>.exe to testservice.exe then you can just execute the
|
|
testservice.exe and this command mode will be executed by default.</p>
|
|
|
|
<source>Run the service named 'Tomcat<version-major/>' in console mode
|
|
C:\> tomcat<version-major/> //TS//Tomcat<version-major/> [additional arguments]
|
|
Or simply execute:
|
|
C:\> tomcat<version-major/></source>
|
|
|
|
</section>
|
|
<section name="Multiple Instances">
|
|
<p>
|
|
Tomcat supports installation of multiple instances. You can have a single
|
|
installation of Tomcat with multiple instances running on different IP/port
|
|
combinations, or multiple Tomcat versions, each running one or more instances on
|
|
different IP/ports.</p>
|
|
<p>
|
|
Each instance folder will need the following structure:
|
|
</p>
|
|
<ul>
|
|
<li>conf</li>
|
|
<li>logs</li>
|
|
<li>temp</li>
|
|
<li>webapps</li>
|
|
<li>work</li>
|
|
</ul>
|
|
<p>
|
|
At a minimum, conf should contain a copy of the following files from
|
|
CATALINA_HOME\conf\. Any files not copied and edited, will be picked up by
|
|
default from CATALINA_HOME\conf, i.e. CATALINA_BASE\conf files override defaults
|
|
from CATALINA_HOME\conf.</p>
|
|
<ul>
|
|
<li>server.xml</li>
|
|
<li>web.xml</li>
|
|
</ul>
|
|
<p>
|
|
You must edit CATALINA_BASE\conf\server.xml to specify a unique IP/port for the
|
|
instance to listen on. Find the line that contains
|
|
<code><Connector port="8080" ...</code> and add an address attribute and/or
|
|
update the port number so as to specify a unique IP/port combination.</p>
|
|
<p>
|
|
To install an instance, first set the CATALINA_HOME environment variable to the
|
|
name of the Tomcat installation directory. Then create a second environment
|
|
variable CATALINA_BASE and point this to the instance folder. Then run
|
|
"service.bat install" command specifying a service name.</p>
|
|
|
|
<source>set CATALINA_HOME=c:\tomcat_<version-major/>
|
|
set CATALINA_BASE=c:\tomcat_<version-major/>\instances\instance1
|
|
service.bat install instance1</source>
|
|
|
|
<p>
|
|
To modify the service settings, you can run <b>tomcat<version-major/>w //ES//instance1</b>.
|
|
</p>
|
|
<p>
|
|
For additional instances, create additional instance folder, update the
|
|
CATALINA_BASE environment variable, and run the "service.bat install" again.</p>
|
|
|
|
<source>set CATALINA_BASE=c:\tomcat_<version-major/>\instances\instance2
|
|
service.bat install instance2</source>
|
|
|
|
</section>
|
|
</body>
|
|
</document>
|