blob: fa39688f8e2e63bcd3e2fe42b5f412391fa70c21 [file] [log] [blame]
Hongqing Liufd5ee812014-05-10 16:32:51 +08001#!/bin/sh
2
3# Licensed to the Apache Software Foundation (ASF) under one or more
4# contributor license agreements. See the NOTICE file distributed with
5# this work for additional information regarding copyright ownership.
6# The ASF licenses this file to You under the Apache License, Version 2.0
7# (the "License"); you may not use this file except in compliance with
8# the License. You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17
18# -----------------------------------------------------------------------------
刘洪青6266f992017-05-15 21:21:03 +080019# Control Script for the CATALINA Server
Hongqing Liufd5ee812014-05-10 16:32:51 +080020#
21# Environment Variable Prerequisites
22#
刘洪青6266f992017-05-15 21:21:03 +080023# Do not set the variables in this script. Instead put them into a script
24# setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
25#
Hongqing Liufd5ee812014-05-10 16:32:51 +080026# CATALINA_HOME May point at your Catalina "build" directory.
27#
28# CATALINA_BASE (Optional) Base directory for resolving dynamic portions
29# of a Catalina installation. If not present, resolves to
30# the same directory that CATALINA_HOME points to.
31#
32# CATALINA_OUT (Optional) Full path to a file where stdout and stderr
33# will be redirected.
34# Default is $CATALINA_BASE/logs/catalina.out
35#
36# CATALINA_OPTS (Optional) Java runtime options used when the "start",
刘洪青6266f992017-05-15 21:21:03 +080037# "run" or "debug" command is executed.
38# Include here and not in JAVA_OPTS all options, that should
39# only be used by Tomcat itself, not by the stop process,
40# the version command etc.
41# Examples are heap size, GC logging, JMX ports etc.
Hongqing Liufd5ee812014-05-10 16:32:51 +080042#
43# CATALINA_TMPDIR (Optional) Directory path location of temporary directory
44# the JVM should use (java.io.tmpdir). Defaults to
45# $CATALINA_BASE/temp.
46#
47# JAVA_HOME Must point at your Java Development Kit installation.
48# Required to run the with the "debug" argument.
49#
刘洪青6266f992017-05-15 21:21:03 +080050# JRE_HOME Must point at your Java Runtime installation.
51# Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
52# are both set, JRE_HOME is used.
Hongqing Liufd5ee812014-05-10 16:32:51 +080053#
刘洪青6266f992017-05-15 21:21:03 +080054# JAVA_OPTS (Optional) Java runtime options used when any command
55# is executed.
56# Include here and not in CATALINA_OPTS all options, that
57# should be used by Tomcat and also by the stop process,
58# the version command etc.
59# Most options should go into CATALINA_OPTS.
Hongqing Liufd5ee812014-05-10 16:32:51 +080060#
61# JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories
62# containing some jars in order to allow replacement of APIs
63# created outside of the JCP (i.e. DOM and SAX from W3C).
64# It can also be used to update the XML parser implementation.
刘洪青a78cd382018-03-01 14:48:24 +080065# Note that Java 9 no longer supports this feature.
Hongqing Liufd5ee812014-05-10 16:32:51 +080066# Defaults to $CATALINA_HOME/endorsed.
67#
68# JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
69# command is executed. The default is "dt_socket".
70#
71# JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
72# command is executed. The default is 8000.
73#
74# JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
75# command is executed. Specifies whether JVM should suspend
76# execution immediately after startup. Default is "n".
77#
78# JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
79# command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
80# and JPDA_SUSPEND are ignored. Thus, all required jpda
81# options MUST be specified. The default is:
82#
83# -agentlib:jdwp=transport=$JPDA_TRANSPORT,
84# address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
85#
刘洪青6266f992017-05-15 21:21:03 +080086# JSSE_OPTS (Optional) Java runtime options used to control the TLS
87# implementation when JSSE is used. Default is:
88# "-Djdk.tls.ephemeralDHKeySize=2048"
89#
Hongqing Liufd5ee812014-05-10 16:32:51 +080090# CATALINA_PID (Optional) Path of the file which should contains the pid
刘洪青6266f992017-05-15 21:21:03 +080091# of the catalina startup java process, when start (fork) is
92# used
Hongqing Liufd5ee812014-05-10 16:32:51 +080093#
94# LOGGING_CONFIG (Optional) Override Tomcat's logging config file
95# Example (all one line)
96# LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
97#
98# LOGGING_MANAGER (Optional) Override Tomcat's logging manager
99# Example (all one line)
100# LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
刘洪青6266f992017-05-15 21:21:03 +0800101#
102# USE_NOHUP (Optional) If set to the string true the start command will
103# use nohup so that the Tomcat process will ignore any hangup
104# signals. Default is "false" unless running on HP-UX in which
105# case the default is "true"
Hongqing Liufd5ee812014-05-10 16:32:51 +0800106# -----------------------------------------------------------------------------
107
108# OS specific support. $var _must_ be set to either true or false.
109cygwin=false
Hongqing Liufd5ee812014-05-10 16:32:51 +0800110darwin=false
刘洪青6266f992017-05-15 21:21:03 +0800111os400=false
112hpux=false
Hongqing Liufd5ee812014-05-10 16:32:51 +0800113case "`uname`" in
114CYGWIN*) cygwin=true;;
Hongqing Liufd5ee812014-05-10 16:32:51 +0800115Darwin*) darwin=true;;
刘洪青6266f992017-05-15 21:21:03 +0800116OS400*) os400=true;;
117HP-UX*) hpux=true;;
Hongqing Liufd5ee812014-05-10 16:32:51 +0800118esac
119
120# resolve links - $0 may be a softlink
121PRG="$0"
122
123while [ -h "$PRG" ]; do
124 ls=`ls -ld "$PRG"`
125 link=`expr "$ls" : '.*-> \(.*\)$'`
126 if expr "$link" : '/.*' > /dev/null; then
127 PRG="$link"
128 else
129 PRG=`dirname "$PRG"`/"$link"
130 fi
131done
132
133# Get standard environment variables
134PRGDIR=`dirname "$PRG"`
135
136# Only set CATALINA_HOME if not already set
137[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
138
139# Copy CATALINA_BASE from CATALINA_HOME if not already set
140[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
141
142# Ensure that any user defined CLASSPATH variables are not used on startup,
143# but allow them to be specified in setenv.sh, in rare case when it is needed.
144CLASSPATH=
145
146if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
147 . "$CATALINA_BASE/bin/setenv.sh"
148elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
149 . "$CATALINA_HOME/bin/setenv.sh"
150fi
151
152# For Cygwin, ensure paths are in UNIX format before anything is touched
153if $cygwin; then
154 [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
155 [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
156 [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
157 [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
158 [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
159fi
160
161# For OS400
162if $os400; then
163 # Set job priority to standard for interactive (interactive - 6) by using
164 # the interactive priority - 6, the helper threads that respond to requests
165 # will be running at the same priority as interactive jobs.
166 COMMAND='chgjob job('$JOBNAME') runpty(6)'
167 system $COMMAND
168
169 # Enable multi threading
170 export QIBM_MULTI_THREADED=Y
171fi
172
173# Get standard Java environment variables
174if $os400; then
175 # -r will Only work on the os400 if the files are:
176 # 1. owned by the user
177 # 2. owned by the PRIMARY group of the user
178 # this will not work if the user belongs in secondary groups
Hongqing Liufd5ee812014-05-10 16:32:51 +0800179 . "$CATALINA_HOME"/bin/setclasspath.sh
180else
181 if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
Hongqing Liufd5ee812014-05-10 16:32:51 +0800182 . "$CATALINA_HOME"/bin/setclasspath.sh
183 else
184 echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
185 echo "This file is needed to run this program"
186 exit 1
187 fi
188fi
189
刘洪青6266f992017-05-15 21:21:03 +0800190# Add on extra jar files to CLASSPATH
Hongqing Liufd5ee812014-05-10 16:32:51 +0800191if [ ! -z "$CLASSPATH" ] ; then
192 CLASSPATH="$CLASSPATH":
193fi
刘洪青6266f992017-05-15 21:21:03 +0800194CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar
Hongqing Liufd5ee812014-05-10 16:32:51 +0800195
196if [ -z "$CATALINA_OUT" ] ; then
197 CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
198fi
199
200if [ -z "$CATALINA_TMPDIR" ] ; then
201 # Define the java.io.tmpdir to use for Catalina
202 CATALINA_TMPDIR="$CATALINA_BASE"/temp
203fi
204
刘洪青6266f992017-05-15 21:21:03 +0800205# Add tomcat-juli.jar to classpath
206# tomcat-juli.jar can be over-ridden per instance
207if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
208 CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar
209else
210 CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar
211fi
212
Hongqing Liufd5ee812014-05-10 16:32:51 +0800213# Bugzilla 37848: When no TTY is available, don't output to console
214have_tty=0
215if [ "`tty`" != "not a tty" ]; then
216 have_tty=1
217fi
218
219# For Cygwin, switch paths to Windows format before running java
220if $cygwin; then
221 JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
222 JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
223 CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
224 CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
225 CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
226 CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
227 JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
228fi
229
刘洪青6266f992017-05-15 21:21:03 +0800230if [ -z "$JSSE_OPTS" ] ; then
231 JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
232fi
233JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
234
Hongqing Liufd5ee812014-05-10 16:32:51 +0800235# Set juli LogManager config file if it is present and an override has not been issued
236if [ -z "$LOGGING_CONFIG" ]; then
237 if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
238 LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
239 else
240 # Bugzilla 45585
241 LOGGING_CONFIG="-Dnop"
242 fi
243fi
244
245if [ -z "$LOGGING_MANAGER" ]; then
246 LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
247fi
248
刘洪青a78cd382018-03-01 14:48:24 +0800249# Java 9 no longer supports the java.endorsed.dirs
250# system property. Only try to use it if
251# JAVA_ENDORSED_DIRS was explicitly set
252# or CATALINA_HOME/endorsed exists.
253ENDORSED_PROP=ignore.endorsed.dirs
254if [ -n "$JAVA_ENDORSED_DIRS" ]; then
255 ENDORSED_PROP=java.endorsed.dirs
256fi
257if [ -d "$CATALINA_HOME/endorsed" ]; then
258 ENDORSED_PROP=java.endorsed.dirs
259fi
260
刘洪青6266f992017-05-15 21:21:03 +0800261# Uncomment the following line to make the umask available when using the
262# org.apache.catalina.security.SecurityListener
263#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
264
265if [ -z "$USE_NOHUP" ]; then
266 if $hpux; then
267 USE_NOHUP="true"
268 else
269 USE_NOHUP="false"
270 fi
271fi
272unset _NOHUP
273if [ "$USE_NOHUP" = "true" ]; then
274 _NOHUP=nohup
275fi
276
刘洪青a78cd382018-03-01 14:48:24 +0800277# Add the JAVA 9 specific start-up parameters required by Tomcat
278JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ALL-UNNAMED"
279JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
280export JDK_JAVA_OPTIONS
281
Hongqing Liufd5ee812014-05-10 16:32:51 +0800282# ----- Execute The Requested Command -----------------------------------------
283
284# Bugzilla 37848: only output this if we have a TTY
285if [ $have_tty -eq 1 ]; then
286 echo "Using CATALINA_BASE: $CATALINA_BASE"
287 echo "Using CATALINA_HOME: $CATALINA_HOME"
288 echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
289 if [ "$1" = "debug" ] ; then
290 echo "Using JAVA_HOME: $JAVA_HOME"
291 else
292 echo "Using JRE_HOME: $JRE_HOME"
293 fi
294 echo "Using CLASSPATH: $CLASSPATH"
295 if [ ! -z "$CATALINA_PID" ]; then
296 echo "Using CATALINA_PID: $CATALINA_PID"
297 fi
298fi
299
300if [ "$1" = "jpda" ] ; then
301 if [ -z "$JPDA_TRANSPORT" ]; then
302 JPDA_TRANSPORT="dt_socket"
303 fi
304 if [ -z "$JPDA_ADDRESS" ]; then
305 JPDA_ADDRESS="8000"
306 fi
307 if [ -z "$JPDA_SUSPEND" ]; then
308 JPDA_SUSPEND="n"
309 fi
310 if [ -z "$JPDA_OPTS" ]; then
311 JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
312 fi
刘洪青6266f992017-05-15 21:21:03 +0800313 CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
Hongqing Liufd5ee812014-05-10 16:32:51 +0800314 shift
315fi
316
317if [ "$1" = "debug" ] ; then
318 if $os400; then
319 echo "Debug command not available on OS400"
320 exit 1
321 else
322 shift
323 if [ "$1" = "-security" ] ; then
324 if [ $have_tty -eq 1 ]; then
325 echo "Using Security Manager"
326 fi
327 shift
328 exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800329 -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
330 -classpath "$CLASSPATH" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800331 -sourcepath "$CATALINA_HOME"/../../java \
332 -Djava.security.manager \
333 -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
334 -Dcatalina.base="$CATALINA_BASE" \
335 -Dcatalina.home="$CATALINA_HOME" \
336 -Djava.io.tmpdir="$CATALINA_TMPDIR" \
337 org.apache.catalina.startup.Bootstrap "$@" start
338 else
339 exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800340 -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
341 -classpath "$CLASSPATH" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800342 -sourcepath "$CATALINA_HOME"/../../java \
343 -Dcatalina.base="$CATALINA_BASE" \
344 -Dcatalina.home="$CATALINA_HOME" \
345 -Djava.io.tmpdir="$CATALINA_TMPDIR" \
346 org.apache.catalina.startup.Bootstrap "$@" start
347 fi
348 fi
349
350elif [ "$1" = "run" ]; then
351
352 shift
353 if [ "$1" = "-security" ] ; then
354 if [ $have_tty -eq 1 ]; then
355 echo "Using Security Manager"
356 fi
357 shift
刘洪青6266f992017-05-15 21:21:03 +0800358 eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800359 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
360 -classpath "\"$CLASSPATH\"" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800361 -Djava.security.manager \
刘洪青6266f992017-05-15 21:21:03 +0800362 -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
363 -Dcatalina.base="\"$CATALINA_BASE\"" \
364 -Dcatalina.home="\"$CATALINA_HOME\"" \
365 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800366 org.apache.catalina.startup.Bootstrap "$@" start
367 else
刘洪青6266f992017-05-15 21:21:03 +0800368 eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800369 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
370 -classpath "\"$CLASSPATH\"" \
刘洪青6266f992017-05-15 21:21:03 +0800371 -Dcatalina.base="\"$CATALINA_BASE\"" \
372 -Dcatalina.home="\"$CATALINA_HOME\"" \
373 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800374 org.apache.catalina.startup.Bootstrap "$@" start
375 fi
376
377elif [ "$1" = "start" ] ; then
378
379 if [ ! -z "$CATALINA_PID" ]; then
380 if [ -f "$CATALINA_PID" ]; then
381 if [ -s "$CATALINA_PID" ]; then
382 echo "Existing PID file found during start."
383 if [ -r "$CATALINA_PID" ]; then
384 PID=`cat "$CATALINA_PID"`
385 ps -p $PID >/dev/null 2>&1
386 if [ $? -eq 0 ] ; then
387 echo "Tomcat appears to still be running with PID $PID. Start aborted."
刘洪青6266f992017-05-15 21:21:03 +0800388 echo "If the following process is not a Tomcat process, remove the PID file and try again:"
389 ps -f -p $PID
Hongqing Liufd5ee812014-05-10 16:32:51 +0800390 exit 1
391 else
392 echo "Removing/clearing stale PID file."
393 rm -f "$CATALINA_PID" >/dev/null 2>&1
394 if [ $? != 0 ]; then
395 if [ -w "$CATALINA_PID" ]; then
396 cat /dev/null > "$CATALINA_PID"
397 else
398 echo "Unable to remove or clear stale PID file. Start aborted."
399 exit 1
400 fi
401 fi
402 fi
403 else
404 echo "Unable to read PID file. Start aborted."
405 exit 1
406 fi
407 else
408 rm -f "$CATALINA_PID" >/dev/null 2>&1
409 if [ $? != 0 ]; then
410 if [ ! -w "$CATALINA_PID" ]; then
411 echo "Unable to remove or write to empty PID file. Start aborted."
412 exit 1
413 fi
414 fi
415 fi
416 fi
417 fi
418
419 shift
420 touch "$CATALINA_OUT"
421 if [ "$1" = "-security" ] ; then
422 if [ $have_tty -eq 1 ]; then
423 echo "Using Security Manager"
424 fi
425 shift
刘洪青6266f992017-05-15 21:21:03 +0800426 eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800427 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
428 -classpath "\"$CLASSPATH\"" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800429 -Djava.security.manager \
刘洪青6266f992017-05-15 21:21:03 +0800430 -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
431 -Dcatalina.base="\"$CATALINA_BASE\"" \
432 -Dcatalina.home="\"$CATALINA_HOME\"" \
433 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800434 org.apache.catalina.startup.Bootstrap "$@" start \
刘洪青6266f992017-05-15 21:21:03 +0800435 >> "$CATALINA_OUT" 2>&1 "&"
Hongqing Liufd5ee812014-05-10 16:32:51 +0800436
437 else
刘洪青6266f992017-05-15 21:21:03 +0800438 eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800439 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
440 -classpath "\"$CLASSPATH\"" \
刘洪青6266f992017-05-15 21:21:03 +0800441 -Dcatalina.base="\"$CATALINA_BASE\"" \
442 -Dcatalina.home="\"$CATALINA_HOME\"" \
443 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800444 org.apache.catalina.startup.Bootstrap "$@" start \
刘洪青6266f992017-05-15 21:21:03 +0800445 >> "$CATALINA_OUT" 2>&1 "&"
Hongqing Liufd5ee812014-05-10 16:32:51 +0800446
447 fi
448
449 if [ ! -z "$CATALINA_PID" ]; then
450 echo $! > "$CATALINA_PID"
451 fi
452
刘洪青6266f992017-05-15 21:21:03 +0800453 echo "Tomcat started."
454
Hongqing Liufd5ee812014-05-10 16:32:51 +0800455elif [ "$1" = "stop" ] ; then
456
457 shift
458
459 SLEEP=5
460 if [ ! -z "$1" ]; then
461 echo $1 | grep "[^0-9]" >/dev/null 2>&1
462 if [ $? -gt 0 ]; then
463 SLEEP=$1
464 shift
465 fi
466 fi
467
468 FORCE=0
469 if [ "$1" = "-force" ]; then
470 shift
471 FORCE=1
472 fi
473
474 if [ ! -z "$CATALINA_PID" ]; then
475 if [ -f "$CATALINA_PID" ]; then
476 if [ -s "$CATALINA_PID" ]; then
477 kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
478 if [ $? -gt 0 ]; then
479 echo "PID file found but no matching process was found. Stop aborted."
480 exit 1
481 fi
482 else
483 echo "PID file is empty and has been ignored."
484 fi
485 else
486 echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."
487 exit 1
488 fi
489 fi
刘洪青6266f992017-05-15 21:21:03 +0800490
491 eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800492 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
493 -classpath "\"$CLASSPATH\"" \
刘洪青6266f992017-05-15 21:21:03 +0800494 -Dcatalina.base="\"$CATALINA_BASE\"" \
495 -Dcatalina.home="\"$CATALINA_HOME\"" \
496 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
Hongqing Liufd5ee812014-05-10 16:32:51 +0800497 org.apache.catalina.startup.Bootstrap "$@" stop
498
刘洪青6266f992017-05-15 21:21:03 +0800499 # stop failed. Shutdown port disabled? Try a normal kill.
500 if [ $? != 0 ]; then
501 if [ ! -z "$CATALINA_PID" ]; then
502 echo "The stop command failed. Attempting to signal the process to stop through OS signal."
503 kill -15 `cat "$CATALINA_PID"` >/dev/null 2>&1
504 fi
505 fi
506
Hongqing Liufd5ee812014-05-10 16:32:51 +0800507 if [ ! -z "$CATALINA_PID" ]; then
508 if [ -f "$CATALINA_PID" ]; then
509 while [ $SLEEP -ge 0 ]; do
510 kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
511 if [ $? -gt 0 ]; then
512 rm -f "$CATALINA_PID" >/dev/null 2>&1
513 if [ $? != 0 ]; then
514 if [ -w "$CATALINA_PID" ]; then
515 cat /dev/null > "$CATALINA_PID"
刘洪青6266f992017-05-15 21:21:03 +0800516 # If Tomcat has stopped don't try and force a stop with an empty PID file
517 FORCE=0
Hongqing Liufd5ee812014-05-10 16:32:51 +0800518 else
刘洪青6266f992017-05-15 21:21:03 +0800519 echo "The PID file could not be removed or cleared."
Hongqing Liufd5ee812014-05-10 16:32:51 +0800520 fi
521 fi
刘洪青6266f992017-05-15 21:21:03 +0800522 echo "Tomcat stopped."
Hongqing Liufd5ee812014-05-10 16:32:51 +0800523 break
524 fi
525 if [ $SLEEP -gt 0 ]; then
526 sleep 1
527 fi
528 if [ $SLEEP -eq 0 ]; then
刘洪青6266f992017-05-15 21:21:03 +0800529 echo "Tomcat did not stop in time."
Hongqing Liufd5ee812014-05-10 16:32:51 +0800530 if [ $FORCE -eq 0 ]; then
刘洪青6266f992017-05-15 21:21:03 +0800531 echo "PID file was not removed."
Hongqing Liufd5ee812014-05-10 16:32:51 +0800532 fi
刘洪青6266f992017-05-15 21:21:03 +0800533 echo "To aid diagnostics a thread dump has been written to standard out."
534 kill -3 `cat "$CATALINA_PID"`
Hongqing Liufd5ee812014-05-10 16:32:51 +0800535 fi
536 SLEEP=`expr $SLEEP - 1 `
537 done
538 fi
539 fi
540
刘洪青6266f992017-05-15 21:21:03 +0800541 KILL_SLEEP_INTERVAL=5
Hongqing Liufd5ee812014-05-10 16:32:51 +0800542 if [ $FORCE -eq 1 ]; then
543 if [ -z "$CATALINA_PID" ]; then
544 echo "Kill failed: \$CATALINA_PID not set"
545 else
546 if [ -f "$CATALINA_PID" ]; then
547 PID=`cat "$CATALINA_PID"`
548 echo "Killing Tomcat with the PID: $PID"
549 kill -9 $PID
刘洪青6266f992017-05-15 21:21:03 +0800550 while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do
551 kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
552 if [ $? -gt 0 ]; then
553 rm -f "$CATALINA_PID" >/dev/null 2>&1
554 if [ $? != 0 ]; then
555 if [ -w "$CATALINA_PID" ]; then
556 cat /dev/null > "$CATALINA_PID"
557 else
558 echo "The PID file could not be removed."
559 fi
560 fi
561 echo "The Tomcat process has been killed."
562 break
563 fi
564 if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then
565 sleep 1
566 fi
567 KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 `
568 done
569 if [ $KILL_SLEEP_INTERVAL -lt 0 ]; then
570 echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."
Hongqing Liufd5ee812014-05-10 16:32:51 +0800571 fi
572 fi
573 fi
574 fi
575
刘洪青6266f992017-05-15 21:21:03 +0800576elif [ "$1" = "configtest" ] ; then
577
578 eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \
刘洪青a78cd382018-03-01 14:48:24 +0800579 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
580 -classpath "\"$CLASSPATH\"" \
刘洪青6266f992017-05-15 21:21:03 +0800581 -Dcatalina.base="\"$CATALINA_BASE\"" \
582 -Dcatalina.home="\"$CATALINA_HOME\"" \
583 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
584 org.apache.catalina.startup.Bootstrap configtest
585 result=$?
586 if [ $result -ne 0 ]; then
587 echo "Configuration error detected!"
588 fi
589 exit $result
590
Hongqing Liufd5ee812014-05-10 16:32:51 +0800591elif [ "$1" = "version" ] ; then
592
593 "$_RUNJAVA" \
594 -classpath "$CATALINA_HOME/lib/catalina.jar" \
595 org.apache.catalina.util.ServerInfo
596
597else
598
599 echo "Usage: catalina.sh ( commands ... )"
600 echo "commands:"
601 if $os400; then
602 echo " debug Start Catalina in a debugger (not available on OS400)"
603 echo " debug -security Debug Catalina with a security manager (not available on OS400)"
604 else
605 echo " debug Start Catalina in a debugger"
606 echo " debug -security Debug Catalina with a security manager"
607 fi
608 echo " jpda start Start Catalina under JPDA debugger"
609 echo " run Start Catalina in the current window"
610 echo " run -security Start in the current window with security manager"
611 echo " start Start Catalina in a separate window"
612 echo " start -security Start in a separate window with security manager"
613 echo " stop Stop Catalina, waiting up to 5 seconds for the process to end"
614 echo " stop n Stop Catalina, waiting up to n seconds for the process to end"
615 echo " stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
616 echo " stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
刘洪青6266f992017-05-15 21:21:03 +0800617 echo " configtest Run a basic syntax check on server.xml - check exit code for result"
Hongqing Liufd5ee812014-05-10 16:32:51 +0800618 echo " version What version of tomcat are you running?"
619 echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"
620 exit 1
621
622fi