Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 1 | #!/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 Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 20 | # ----------------------------------------------------------------------------- |
| 21 | # |
| 22 | # resolve links - $0 may be a softlink |
| 23 | ARG0="$0" |
| 24 | while [ -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 |
| 32 | done |
| 33 | DIRNAME="`dirname $ARG0`" |
| 34 | PROGRAM="`basename $ARG0`" |
| 35 | while [ ".$1" != . ] |
| 36 | do |
| 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 | ;; |
刘洪青 | 6582752 | 2016-10-19 16:10:39 +0800 | [diff] [blame] | 63 | --service-start-wait-time ) |
| 64 | SERVICE_START_WAIT_TIME="$2" |
| 65 | shift; shift; |
| 66 | continue |
| 67 | ;; |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 68 | * ) |
| 69 | break |
| 70 | ;; |
| 71 | esac |
| 72 | done |
| 73 | # OS specific support (must be 'true' or 'false'). |
| 74 | cygwin=false; |
| 75 | darwin=false; |
| 76 | case "`uname`" in |
| 77 | CYGWIN*) |
| 78 | cygwin=true |
| 79 | ;; |
| 80 | Darwin*) |
| 81 | darwin=true |
| 82 | ;; |
| 83 | esac |
| 84 | |
| 85 | # Use the maximum available, or set MAX_FD != -1 to use that |
| 86 | test ".$MAX_FD" = . && MAX_FD="maximum" |
| 87 | # Setup parameters for running the jsvc |
| 88 | # |
| 89 | test ".$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 | # |
| 95 | if [ -z "$JAVA_HOME" ]; then |
| 96 | JAVA_BIN="`which java 2>/dev/null || type java 2>&1`" |
刘洪青 | 8d26a3c | 2018-02-28 18:16:21 +0800 | [diff] [blame^] | 97 | 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 Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 106 | test -x "$JAVA_BIN" && JAVA_HOME="`dirname $JAVA_BIN`" |
| 107 | test ".$JAVA_HOME" != . && JAVA_HOME=`cd "$JAVA_HOME/.." >/dev/null; pwd` |
| 108 | else |
| 109 | JAVA_BIN="$JAVA_HOME/bin/java" |
| 110 | fi |
| 111 | |
| 112 | # Only set CATALINA_HOME if not already set |
| 113 | test ".$CATALINA_HOME" = . && CATALINA_HOME=`cd "$DIRNAME/.." >/dev/null; pwd` |
| 114 | test ".$CATALINA_BASE" = . && CATALINA_BASE="$CATALINA_HOME" |
| 115 | test ".$CATALINA_MAIN" = . && CATALINA_MAIN=org.apache.catalina.startup.Bootstrap |
刘洪青 | 6582752 | 2016-10-19 16:10:39 +0800 | [diff] [blame] | 116 | # If not explicitly set, look for jsvc in CATALINA_BASE first then CATALINA_HOME |
| 117 | if [ -z "$JSVC" ]; then |
| 118 | JSVC="$CATALINA_BASE/bin/jsvc" |
| 119 | if [ ! -x "$JSVC" ]; then |
| 120 | JSVC="$CATALINA_HOME/bin/jsvc" |
| 121 | fi |
| 122 | fi |
| 123 | # Set the default service-start wait time if necessary |
| 124 | test ".$SERVICE_START_WAIT_TIME" = . && SERVICE_START_WAIT_TIME=10 |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 125 | |
| 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. |
| 128 | CLASSPATH= |
| 129 | JAVA_OPTS= |
| 130 | if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then |
| 131 | . "$CATALINA_BASE/bin/setenv.sh" |
| 132 | elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then |
| 133 | . "$CATALINA_HOME/bin/setenv.sh" |
| 134 | fi |
| 135 | |
| 136 | # Add on extra jar files to CLASSPATH |
| 137 | test ".$CLASSPATH" != . && CLASSPATH="${CLASSPATH}:" |
| 138 | CLASSPATH="$CLASSPATH$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-daemon.jar" |
| 139 | |
| 140 | test ".$CATALINA_OUT" = . && CATALINA_OUT="$CATALINA_BASE/logs/catalina-daemon.out" |
| 141 | test ".$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 |
| 145 | if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then |
| 146 | CLASSPATH="$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar" |
| 147 | else |
| 148 | CLASSPATH="$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar" |
| 149 | fi |
| 150 | # Set juli LogManager config file if it is present and an override has not been issued |
| 151 | if [ -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 |
| 158 | fi |
| 159 | |
| 160 | test ".$LOGGING_MANAGER" = . && LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" |
| 161 | JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER" |
| 162 | |
| 163 | # Set -pidfile |
| 164 | test ".$CATALINA_PID" = . && CATALINA_PID="$CATALINA_BASE/logs/catalina-daemon.pid" |
| 165 | |
| 166 | # Increase the maximum file descriptors if we can |
| 167 | if [ "$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 |
| 182 | fi |
| 183 | |
刘洪青 | 8d26a3c | 2018-02-28 18:16:21 +0800 | [diff] [blame^] | 184 | # 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. |
| 188 | ENDORSED_PROP=ignore.endorsed.dirs |
| 189 | if [ -n "$JAVA_ENDORSED_DIRS" ]; then |
| 190 | ENDORSED_PROP=java.endorsed.dirs |
| 191 | fi |
| 192 | if [ -d "$CATALINA_HOME/endorsed" ]; then |
| 193 | ENDORSED_PROP=java.endorsed.dirs |
| 194 | fi |
| 195 | |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 196 | # ----- Execute The Requested Command ----------------------------------------- |
| 197 | case "$1" in |
| 198 | run ) |
| 199 | shift |
| 200 | "$JSVC" $* \ |
| 201 | $JSVC_OPTS \ |
| 202 | -java-home "$JAVA_HOME" \ |
| 203 | -pidfile "$CATALINA_PID" \ |
刘洪青 | 6582752 | 2016-10-19 16:10:39 +0800 | [diff] [blame] | 204 | -wait "$SERVICE_START_WAIT_TIME" \ |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 205 | -nodetach \ |
| 206 | -outfile "&1" \ |
| 207 | -errfile "&2" \ |
| 208 | -classpath "$CLASSPATH" \ |
| 209 | "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ |
刘洪青 | 8d26a3c | 2018-02-28 18:16:21 +0800 | [diff] [blame^] | 210 | -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \ |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 211 | -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" \ |
刘洪青 | 6582752 | 2016-10-19 16:10:39 +0800 | [diff] [blame] | 222 | -wait "$SERVICE_START_WAIT_TIME" \ |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 223 | -outfile "$CATALINA_OUT" \ |
| 224 | -errfile "&1" \ |
| 225 | -classpath "$CLASSPATH" \ |
| 226 | "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ |
刘洪青 | 8d26a3c | 2018-02-28 18:16:21 +0800 | [diff] [blame^] | 227 | -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \ |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 228 | -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" \ |
刘洪青 | 8d26a3c | 2018-02-28 18:16:21 +0800 | [diff] [blame^] | 239 | -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \ |
Cheng Tang | 697ce24 | 2014-04-27 16:18:17 +0800 | [diff] [blame] | 240 | -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 | ;; |
| 273 | esac |