blob: ef9f708b5d7b03a28ab543c2ea4ccb3d0cf40f45 [file] [log] [blame]
Cheng Tang697ce242014-04-27 16:18:17 +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# -----------------------------------------------------------------------------
19# Commons Daemon wrapper script.
Cheng Tang697ce242014-04-27 16:18:17 +080020# -----------------------------------------------------------------------------
21#
22# resolve links - $0 may be a softlink
23ARG0="$0"
24while [ -h "$ARG0" ]; do
25 ls=`ls -ld "$ARG0"`
26 link=`expr "$ls" : '.*-> \(.*\)$'`
27 if expr "$link" : '/.*' > /dev/null; then
28 ARG0="$link"
29 else
30 ARG0="`dirname $ARG0`/$link"
31 fi
32done
33DIRNAME="`dirname $ARG0`"
34PROGRAM="`basename $ARG0`"
35while [ ".$1" != . ]
36do
37 case "$1" in
38 --java-home )
39 JAVA_HOME="$2"
40 shift; shift;
41 continue
42 ;;
43 --catalina-home )
44 CATALINA_HOME="$2"
45 shift; shift;
46 continue
47 ;;
48 --catalina-base )
49 CATALINA_BASE="$2"
50 shift; shift;
51 continue
52 ;;
53 --catalina-pid )
54 CATALINA_PID="$2"
55 shift; shift;
56 continue
57 ;;
58 --tomcat-user )
59 TOMCAT_USER="$2"
60 shift; shift;
61 continue
62 ;;
刘洪青65827522016-10-19 16:10:39 +080063 --service-start-wait-time )
64 SERVICE_START_WAIT_TIME="$2"
65 shift; shift;
66 continue
67 ;;
Cheng Tang697ce242014-04-27 16:18:17 +080068 * )
69 break
70 ;;
71 esac
72done
73# OS specific support (must be 'true' or 'false').
74cygwin=false;
75darwin=false;
76case "`uname`" in
77 CYGWIN*)
78 cygwin=true
79 ;;
80 Darwin*)
81 darwin=true
82 ;;
83esac
84
85# Use the maximum available, or set MAX_FD != -1 to use that
86test ".$MAX_FD" = . && MAX_FD="maximum"
87# Setup parameters for running the jsvc
88#
89test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat
90# Set JAVA_HOME to working JDK or JRE
91# JAVA_HOME=/opt/jdk-1.6.0.22
92# If not set we'll try to guess the JAVA_HOME
93# from java binary if on the PATH
94#
95if [ -z "$JAVA_HOME" ]; then
96 JAVA_BIN="`which java 2>/dev/null || type java 2>&1`"
刘洪青8d26a3c2018-02-28 18:16:21 +080097 while [ -h "$JAVA_BIN" ]; do
98 ls=`ls -ld "$JAVA_BIN"`
99 link=`expr "$ls" : '.*-> \(.*\)$'`
100 if expr "$link" : '/.*' > /dev/null; then
101 JAVA_BIN="$link"
102 else
103 JAVA_BIN="`dirname $JAVA_BIN`/$link"
104 fi
105 done
Cheng Tang697ce242014-04-27 16:18:17 +0800106 test -x "$JAVA_BIN" && JAVA_HOME="`dirname $JAVA_BIN`"
107 test ".$JAVA_HOME" != . && JAVA_HOME=`cd "$JAVA_HOME/.." >/dev/null; pwd`
108else
109 JAVA_BIN="$JAVA_HOME/bin/java"
110fi
111
112# Only set CATALINA_HOME if not already set
113test ".$CATALINA_HOME" = . && CATALINA_HOME=`cd "$DIRNAME/.." >/dev/null; pwd`
114test ".$CATALINA_BASE" = . && CATALINA_BASE="$CATALINA_HOME"
115test ".$CATALINA_MAIN" = . && CATALINA_MAIN=org.apache.catalina.startup.Bootstrap
刘洪青65827522016-10-19 16:10:39 +0800116# If not explicitly set, look for jsvc in CATALINA_BASE first then CATALINA_HOME
117if [ -z "$JSVC" ]; then
118 JSVC="$CATALINA_BASE/bin/jsvc"
119 if [ ! -x "$JSVC" ]; then
120 JSVC="$CATALINA_HOME/bin/jsvc"
121 fi
122fi
123# Set the default service-start wait time if necessary
124test ".$SERVICE_START_WAIT_TIME" = . && SERVICE_START_WAIT_TIME=10
Cheng Tang697ce242014-04-27 16:18:17 +0800125
126# Ensure that any user defined CLASSPATH variables are not used on startup,
127# but allow them to be specified in setenv.sh, in rare case when it is needed.
128CLASSPATH=
129JAVA_OPTS=
130if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
131 . "$CATALINA_BASE/bin/setenv.sh"
132elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
133 . "$CATALINA_HOME/bin/setenv.sh"
134fi
135
136# Add on extra jar files to CLASSPATH
137test ".$CLASSPATH" != . && CLASSPATH="${CLASSPATH}:"
138CLASSPATH="$CLASSPATH$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-daemon.jar"
139
140test ".$CATALINA_OUT" = . && CATALINA_OUT="$CATALINA_BASE/logs/catalina-daemon.out"
141test ".$CATALINA_TMP" = . && CATALINA_TMP="$CATALINA_BASE/temp"
142
143# Add tomcat-juli.jar to classpath
144# tomcat-juli.jar can be over-ridden per instance
145if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
146 CLASSPATH="$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar"
147else
148 CLASSPATH="$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar"
149fi
150# Set juli LogManager config file if it is present and an override has not been issued
151if [ -z "$LOGGING_CONFIG" ]; then
152 if [ -r "$CATALINA_BASE/conf/logging.properties" ]; then
153 LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
154 else
155 # Bugzilla 45585
156 LOGGING_CONFIG="-Dnop"
157 fi
158fi
159
160test ".$LOGGING_MANAGER" = . && LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
161JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
162
163# Set -pidfile
164test ".$CATALINA_PID" = . && CATALINA_PID="$CATALINA_BASE/logs/catalina-daemon.pid"
165
166# Increase the maximum file descriptors if we can
167if [ "$cygwin" = "false" ]; then
168 MAX_FD_LIMIT=`ulimit -H -n`
169 if [ "$?" -eq 0 ]; then
170 # Darwin does not allow RLIMIT_INFINITY on file soft limit
171 if [ "$darwin" = "true" -a "$MAX_FD_LIMIT" = "unlimited" ]; then
172 MAX_FD_LIMIT=`/usr/sbin/sysctl -n kern.maxfilesperproc`
173 fi
174 test ".$MAX_FD" = ".maximum" && MAX_FD="$MAX_FD_LIMIT"
175 ulimit -n $MAX_FD
176 if [ "$?" -ne 0 ]; then
177 echo "$PROGRAM: Could not set maximum file descriptor limit: $MAX_FD"
178 fi
179 else
180 echo "$PROGRAM: Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
181 fi
182fi
183
刘洪青8d26a3c2018-02-28 18:16:21 +0800184# Java 9 no longer supports the java.endorsed.dirs
185# system property. Only try to use it if
186# JAVA_ENDORSED_DIRS was explicitly set
187# or CATALINA_HOME/endorsed exists.
188ENDORSED_PROP=ignore.endorsed.dirs
189if [ -n "$JAVA_ENDORSED_DIRS" ]; then
190 ENDORSED_PROP=java.endorsed.dirs
191fi
192if [ -d "$CATALINA_HOME/endorsed" ]; then
193 ENDORSED_PROP=java.endorsed.dirs
194fi
195
Cheng Tang697ce242014-04-27 16:18:17 +0800196# ----- Execute The Requested Command -----------------------------------------
197case "$1" in
198 run )
199 shift
200 "$JSVC" $* \
201 $JSVC_OPTS \
202 -java-home "$JAVA_HOME" \
203 -pidfile "$CATALINA_PID" \
刘洪青65827522016-10-19 16:10:39 +0800204 -wait "$SERVICE_START_WAIT_TIME" \
Cheng Tang697ce242014-04-27 16:18:17 +0800205 -nodetach \
206 -outfile "&1" \
207 -errfile "&2" \
208 -classpath "$CLASSPATH" \
209 "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
刘洪青8d26a3c2018-02-28 18:16:21 +0800210 -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
Cheng Tang697ce242014-04-27 16:18:17 +0800211 -Dcatalina.base="$CATALINA_BASE" \
212 -Dcatalina.home="$CATALINA_HOME" \
213 -Djava.io.tmpdir="$CATALINA_TMP" \
214 $CATALINA_MAIN
215 exit $?
216 ;;
217 start )
218 "$JSVC" $JSVC_OPTS \
219 -java-home "$JAVA_HOME" \
220 -user $TOMCAT_USER \
221 -pidfile "$CATALINA_PID" \
刘洪青65827522016-10-19 16:10:39 +0800222 -wait "$SERVICE_START_WAIT_TIME" \
Cheng Tang697ce242014-04-27 16:18:17 +0800223 -outfile "$CATALINA_OUT" \
224 -errfile "&1" \
225 -classpath "$CLASSPATH" \
226 "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
刘洪青8d26a3c2018-02-28 18:16:21 +0800227 -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
Cheng Tang697ce242014-04-27 16:18:17 +0800228 -Dcatalina.base="$CATALINA_BASE" \
229 -Dcatalina.home="$CATALINA_HOME" \
230 -Djava.io.tmpdir="$CATALINA_TMP" \
231 $CATALINA_MAIN
232 exit $?
233 ;;
234 stop )
235 "$JSVC" $JSVC_OPTS \
236 -stop \
237 -pidfile "$CATALINA_PID" \
238 -classpath "$CLASSPATH" \
刘洪青8d26a3c2018-02-28 18:16:21 +0800239 -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
Cheng Tang697ce242014-04-27 16:18:17 +0800240 -Dcatalina.base="$CATALINA_BASE" \
241 -Dcatalina.home="$CATALINA_HOME" \
242 -Djava.io.tmpdir="$CATALINA_TMP" \
243 $CATALINA_MAIN
244 exit $?
245 ;;
246 version )
247 "$JSVC" \
248 -java-home "$JAVA_HOME" \
249 -pidfile "$CATALINA_PID" \
250 -classpath "$CLASSPATH" \
251 -errfile "&2" \
252 -version \
253 -check \
254 $CATALINA_MAIN
255 if [ "$?" = 0 ]; then
256 "$JAVA_BIN" \
257 -classpath "$CATALINA_HOME/lib/catalina.jar" \
258 org.apache.catalina.util.ServerInfo
259 fi
260 exit $?
261 ;;
262 * )
263 echo "Unknown command: \`$1'"
264 echo "Usage: $PROGRAM ( commands ... )"
265 echo "commands:"
266 echo " run Start Tomcat without detaching from console"
267 echo " start Start Tomcat"
268 echo " stop Stop Tomcat"
269 echo " version What version of commons daemon and Tomcat"
270 echo " are you running?"
271 exit 1
272 ;;
273esac