@echo off
|
rem Licensed to the Apache Software Foundation (ASF) under one or more
|
rem contributor license agreements. See the NOTICE file distributed with
|
rem this work for additional information regarding copyright ownership.
|
rem The ASF licenses this file to You under the Apache License, Version 2.0
|
rem (the "License"); you may not use this file except in compliance with
|
rem the License. You may obtain a copy of the License at
|
rem
|
rem http://www.apache.org/licenses/LICENSE-2.0
|
rem
|
rem Unless required by applicable law or agreed to in writing, software
|
rem distributed under the License is distributed on an "AS IS" BASIS,
|
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
rem See the License for the specific language governing permissions and
|
rem limitations under the License.
|
|
rem ---------------------------------------------------------------------------
|
rem Start/Stop Script for the CATALINA Server
|
rem
|
rem For supported commands call "catalina.bat help" or see the usage section
|
rem towards the end of this file.
|
rem
|
rem Environment Variable Prerequisites
|
rem
|
rem Do not set the variables in this script. Instead put them into a script
|
rem setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
|
rem
|
rem WHEN RUNNING TOMCAT AS A WINDOWS SERVICE:
|
rem Note that the environment variables that affect the behavior of this
|
rem script will have no effect at all on Windows Services. As such, any
|
rem local customizations made in a CATALINA_BASE/bin/setenv.bat script
|
rem will also have no effect on Tomcat when launched as a Windows Service.
|
rem The configuration that controls Windows Services is stored in the Windows
|
rem Registry, and is most conveniently maintained using the "tomcat8w.exe"
|
rem maintenance utility.
|
rem
|
rem CATALINA_HOME May point at your Catalina "build" directory.
|
rem
|
rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions
|
rem of a Catalina installation. If not present, resolves to
|
rem the same directory that CATALINA_HOME points to.
|
rem
|
rem CATALINA_OPTS (Optional) Java runtime options used when the "start",
|
rem "run" or "debug" command is executed.
|
rem Include here and not in JAVA_OPTS all options, that should
|
rem only be used by Tomcat itself, not by the stop process,
|
rem the version command etc.
|
rem Examples are heap size, GC logging, JMX ports etc.
|
rem
|
rem CATALINA_TMPDIR (Optional) Directory path location of temporary directory
|
rem the JVM should use (java.io.tmpdir). Defaults to
|
rem %CATALINA_BASE%\temp.
|
rem
|
rem JAVA_HOME Must point at your Java Development Kit installation.
|
rem Required to run the with the "debug" argument.
|
rem
|
rem JRE_HOME Must point at your Java Runtime installation.
|
rem Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
|
rem are both set, JRE_HOME is used.
|
rem
|
rem JAVA_OPTS (Optional) Java runtime options used when any command
|
rem is executed.
|
rem Include here and not in CATALINA_OPTS all options, that
|
rem should be used by Tomcat and also by the stop process,
|
rem the version command etc.
|
rem Most options should go into CATALINA_OPTS.
|
rem
|
rem JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories
|
rem containing some jars in order to allow replacement of APIs
|
rem created outside of the JCP (i.e. DOM and SAX from W3C).
|
rem It can also be used to update the XML parser implementation.
|
rem This is only supported for Java <= 8.
|
rem Defaults to $CATALINA_HOME/endorsed.
|
rem
|
rem JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
|
rem command is executed. The default is "dt_socket".
|
rem
|
rem JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
|
rem command is executed. The default is localhost:8000.
|
rem
|
rem JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
|
rem command is executed. Specifies whether JVM should suspend
|
rem execution immediately after startup. Default is "n".
|
rem
|
rem JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
|
rem command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
|
rem and JPDA_SUSPEND are ignored. Thus, all required jpda
|
rem options MUST be specified. The default is:
|
rem
|
rem -agentlib:jdwp=transport=%JPDA_TRANSPORT%,
|
rem address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
|
rem
|
rem JSSE_OPTS (Optional) Java runtime options used to control the TLS
|
rem implementation when JSSE is used. Default is:
|
rem "-Djdk.tls.ephemeralDHKeySize=2048"
|
rem
|
rem CATALINA_LOGGING_CONFIG (Optional) Override Tomcat's logging config file
|
rem Example (all one line)
|
rem set CATALINA_LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
|
rem
|
rem LOGGING_CONFIG Deprecated
|
rem Use CATALINA_LOGGING_CONFIG
|
rem This is only used if CATALINA_LOGGING_CONFIG is not set
|
rem and LOGGING_CONFIG starts with "-D..."
|
rem
|
rem LOGGING_MANAGER (Optional) Override Tomcat's logging manager
|
rem Example (all one line)
|
rem set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
|
rem
|
rem TITLE (Optional) Specify the title of Tomcat window. The default
|
rem TITLE is Tomcat if it's not specified.
|
rem Example (all one line)
|
rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%]
|
rem ---------------------------------------------------------------------------
|
|
setlocal
|
|
rem Suppress Terminate batch job on CTRL+C
|
if not ""%1"" == ""run"" goto mainEntry
|
if "%TEMP%" == "" goto mainEntry
|
if exist "%TEMP%\%~nx0.run" goto mainEntry
|
echo Y>"%TEMP%\%~nx0.run"
|
if not exist "%TEMP%\%~nx0.run" goto mainEntry
|
echo Y>"%TEMP%\%~nx0.Y"
|
call "%~f0" %* <"%TEMP%\%~nx0.Y"
|
rem Use provided errorlevel
|
set RETVAL=%ERRORLEVEL%
|
del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1
|
exit /B %RETVAL%
|
:mainEntry
|
del /Q "%TEMP%\%~nx0.run" >NUL 2>&1
|
|
rem Guess CATALINA_HOME if not defined
|
set "CURRENT_DIR=%cd%"
|
if not "%CATALINA_HOME%" == "" goto gotHome
|
set "CATALINA_HOME=%CURRENT_DIR%"
|
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
|
cd ..
|
set "CATALINA_HOME=%cd%"
|
cd "%CURRENT_DIR%"
|
:gotHome
|
|
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
|
echo The CATALINA_HOME environment variable is not defined correctly
|
echo This environment variable is needed to run this program
|
goto end
|
:okHome
|
|
rem Copy CATALINA_BASE from CATALINA_HOME if not defined
|
if not "%CATALINA_BASE%" == "" goto gotBase
|
set "CATALINA_BASE=%CATALINA_HOME%"
|
:gotBase
|
|
rem Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a semi-colon
|
rem as this is used as the separator in the classpath and Java provides no
|
rem mechanism for escaping if the same character appears in the path. Check this
|
rem by replacing all occurrences of ';' with '' and checking that neither
|
rem CATALINA_HOME nor CATALINA_BASE have changed
|
if "%CATALINA_HOME%" == "%CATALINA_HOME:;=%" goto homeNoSemicolon
|
echo Using CATALINA_HOME: "%CATALINA_HOME%"
|
echo Unable to start as CATALINA_HOME contains a semicolon (;) character
|
goto end
|
:homeNoSemicolon
|
|
if "%CATALINA_BASE%" == "%CATALINA_BASE:;=%" goto baseNoSemicolon
|
echo Using CATALINA_BASE: "%CATALINA_BASE%"
|
echo Unable to start as CATALINA_BASE contains a semicolon (;) character
|
goto end
|
:baseNoSemicolon
|
|
rem Ensure that any user defined CLASSPATH variables are not used on startup,
|
rem but allow them to be specified in setenv.bat, in rare case when it is needed.
|
set CLASSPATH=
|
|
rem Get standard environment variables
|
if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
|
call "%CATALINA_BASE%\bin\setenv.bat"
|
goto setenvDone
|
:checkSetenvHome
|
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
|
:setenvDone
|
|
rem Get standard Java environment variables
|
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
|
echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
|
echo This file is needed to run this program
|
goto end
|
:okSetclasspath
|
call "%CATALINA_HOME%\bin\setclasspath.bat" %1
|
if errorlevel 1 goto end
|
|
rem Add on extra jar file to CLASSPATH
|
rem Note that there are no quotes as we do not want to introduce random
|
rem quotes into the CLASSPATH
|
if "%CLASSPATH%" == "" goto emptyClasspath
|
set "CLASSPATH=%CLASSPATH%;"
|
:emptyClasspath
|
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"
|
|
if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
|
set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
|
:gotTmpdir
|
|
rem Add tomcat-juli.jar to classpath
|
rem tomcat-juli.jar can be over-ridden per instance
|
if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome
|
set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar"
|
goto juliClasspathDone
|
:juliClasspathHome
|
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"
|
:juliClasspathDone
|
|
if not "%JSSE_OPTS%" == "" goto gotJsseOpts
|
set "JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048"
|
:gotJsseOpts
|
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
|
|
rem Register custom URL handlers
|
rem Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
|
set "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
|
|
rem Check for the deprecated LOGGING_CONFIG
|
rem Only use it if CATALINA_LOGGING_CONFIG is not set and LOGGING_CONFIG starts with "-D..."
|
if not "%LOGGING_CONFIG:~0,2%"=="-D" goto noLoggingDeprecation
|
if not "%CATALINA_LOGGING_CONFIG%" == "" goto noLoggingDeprecation
|
set "CATALINA_LOGGING_CONFIG=%LOGGING_CONFIG%"
|
:noLoggingDeprecation
|
|
if not "%CATALINA_LOGGING_CONFIG%" == "" goto noJuliConfig
|
set CATALINA_LOGGING_CONFIG=-Dnop
|
if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
|
set CATALINA_LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
|
:noJuliConfig
|
|
if not "%LOGGING_MANAGER%" == "" goto noJuliManager
|
set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
|
:noJuliManager
|
|
rem Configure JAVA 9 specific start-up parameters
|
set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.lang=ALL-UNNAMED"
|
set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.io=ALL-UNNAMED"
|
set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.util=ALL-UNNAMED"
|
set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.util.concurrent=ALL-UNNAMED"
|
set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
|
|
rem Java 9 no longer supports the java.endorsed.dirs
|
rem system property. Only try to use it if
|
rem JAVA_ENDORSED_DIRS was explicitly set
|
rem or CATALINA_HOME/endorsed exists.
|
set ENDORSED_PROP=ignore.endorsed.dirs
|
if "%JAVA_ENDORSED_DIRS%" == "" goto noEndorsedVar
|
set ENDORSED_PROP=java.endorsed.dirs
|
goto doneEndorsed
|
:noEndorsedVar
|
if not exist "%CATALINA_HOME%\endorsed" goto doneEndorsed
|
set ENDORSED_PROP=java.endorsed.dirs
|
:doneEndorsed
|
|
rem ----- Execute The Requested Command ---------------------------------------
|
|
echo Using CATALINA_BASE: "%CATALINA_BASE%"
|
echo Using CATALINA_HOME: "%CATALINA_HOME%"
|
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
|
if ""%1"" == ""debug"" goto use_jdk
|
echo Using JRE_HOME: "%JRE_HOME%"
|
goto java_dir_displayed
|
:use_jdk
|
echo Using JAVA_HOME: "%JAVA_HOME%"
|
:java_dir_displayed
|
echo Using CLASSPATH: "%CLASSPATH%"
|
echo Using CATALINA_OPTS: "%CATALINA_OPTS%"
|
|
set _EXECJAVA=%_RUNJAVA%
|
set MAINCLASS=org.apache.catalina.startup.Bootstrap
|
set ACTION=start
|
set SECURITY_POLICY_FILE=
|
set DEBUG_OPTS=
|
set JPDA=
|
|
if not ""%1"" == ""jpda"" goto noJpda
|
set JPDA=jpda
|
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
|
set JPDA_TRANSPORT=dt_socket
|
:gotJpdaTransport
|
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
|
set JPDA_ADDRESS=localhost:8000
|
:gotJpdaAddress
|
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
|
set JPDA_SUSPEND=n
|
:gotJpdaSuspend
|
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
|
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
|
:gotJpdaOpts
|
shift
|
:noJpda
|
|
if ""%1"" == ""debug"" goto doDebug
|
if ""%1"" == ""run"" goto doRun
|
if ""%1"" == ""start"" goto doStart
|
if ""%1"" == ""stop"" goto doStop
|
if ""%1"" == ""configtest"" goto doConfigTest
|
if ""%1"" == ""version"" goto doVersion
|
|
echo Usage: catalina ( commands ... )
|
echo commands:
|
echo debug Start Catalina in a debugger
|
echo debug -security Debug Catalina with a security manager
|
echo jpda start Start Catalina under JPDA debugger
|
echo run Start Catalina in the current window
|
echo run -security Start in the current window with security manager
|
echo start Start Catalina in a separate window
|
echo start -security Start in a separate window with security manager
|
echo stop Stop Catalina
|
echo configtest Run a basic syntax check on server.xml
|
echo version What version of tomcat are you running?
|
goto end
|
|
:doDebug
|
shift
|
set _EXECJAVA=%_RUNJDB%
|
set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java"
|
if not ""%1"" == ""-security"" goto execCmd
|
shift
|
echo Using Security Manager
|
set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
|
goto execCmd
|
|
:doRun
|
shift
|
if not ""%1"" == ""-security"" goto execCmd
|
shift
|
echo Using Security Manager
|
set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
|
goto execCmd
|
|
:doStart
|
shift
|
if "%TITLE%" == "" set TITLE=Tomcat
|
set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
|
if not ""%1"" == ""-security"" goto execCmd
|
shift
|
echo Using Security Manager
|
set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
|
goto execCmd
|
|
:doStop
|
shift
|
set ACTION=stop
|
set CATALINA_OPTS=
|
goto execCmd
|
|
:doConfigTest
|
shift
|
set ACTION=configtest
|
set CATALINA_OPTS=
|
goto execCmd
|
|
:doVersion
|
%_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo
|
goto end
|
|
|
:execCmd
|
rem Get remaining unshifted command line arguments and save them in the
|
set CMD_LINE_ARGS=
|
:setArgs
|
if ""%1""=="""" goto doneSetArgs
|
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
|
shift
|
goto setArgs
|
:doneSetArgs
|
|
rem Execute Java with the applicable properties
|
if not "%JPDA%" == "" goto doJpda
|
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
|
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
|
goto end
|
:doSecurity
|
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
|
goto end
|
:doJpda
|
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
|
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
|
goto end
|
:doSecurityJpda
|
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
|
goto end
|
|
:end
|