daemon.sh 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. #!/bin/sh
  2. # Licensed to the Apache Software Foundation (ASF) under one or more
  3. # contributor license agreements. See the NOTICE file distributed with
  4. # this work for additional information regarding copyright ownership.
  5. # The ASF licenses this file to You under the Apache License, Version 2.0
  6. # (the "License"); you may not use this file except in compliance with
  7. # the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing, software
  12. # distributed under the License is distributed on an "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. # See the License for the specific language governing permissions and
  15. # limitations under the License.
  16. #
  17. # -----------------------------------------------------------------------------
  18. # Commons Daemon wrapper script.
  19. # -----------------------------------------------------------------------------
  20. # resolve links - $0 may be a softlink
  21. PRG="$0"
  22. while [ -h "$PRG" ]; do
  23. ls=`ls -ld "$PRG"`
  24. link=`expr "$ls" : '.*-> \(.*\)$'`
  25. if expr "$link" : '/.*' > /dev/null; then
  26. PRG="$link"
  27. else
  28. PRG=`dirname "$PRG"`/"$link"
  29. fi
  30. done
  31. DIRNAME="`dirname "$PRG"`"
  32. PROGRAM="`basename "$PRG"`"
  33. while [ ".$1" != . ]
  34. do
  35. case "$1" in
  36. --java-home )
  37. JAVA_HOME="$2"
  38. shift; shift;
  39. continue
  40. ;;
  41. --catalina-home )
  42. CATALINA_HOME="$2"
  43. shift; shift;
  44. continue
  45. ;;
  46. --catalina-base )
  47. CATALINA_BASE="$2"
  48. shift; shift;
  49. continue
  50. ;;
  51. --catalina-pid )
  52. CATALINA_PID="$2"
  53. shift; shift;
  54. continue
  55. ;;
  56. --tomcat-user )
  57. TOMCAT_USER="$2"
  58. shift; shift;
  59. continue
  60. ;;
  61. --service-start-wait-time )
  62. SERVICE_START_WAIT_TIME="$2"
  63. shift; shift;
  64. continue
  65. ;;
  66. * )
  67. break
  68. ;;
  69. esac
  70. done
  71. # OS specific support (must be 'true' or 'false').
  72. cygwin=false;
  73. darwin=false;
  74. case "`uname`" in
  75. CYGWIN*)
  76. cygwin=true
  77. ;;
  78. Darwin*)
  79. darwin=true
  80. ;;
  81. esac
  82. # Use the maximum available, or set MAX_FD != -1 to use that
  83. test ".$MAX_FD" = . && MAX_FD="maximum"
  84. # Setup parameters for running the jsvc
  85. #
  86. test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat
  87. # Set JAVA_HOME to working JDK or JRE
  88. # If not set we'll try to guess the JAVA_HOME
  89. # from java binary if on the PATH
  90. #
  91. if [ -z "$JAVA_HOME" ]; then
  92. JAVA_BIN="`which java 2>/dev/null || type java 2>&1`"
  93. while [ -h "$JAVA_BIN" ]; do
  94. ls=`ls -ld "$JAVA_BIN"`
  95. link=`expr "$ls" : '.*-> \(.*\)$'`
  96. if expr "$link" : '/.*' > /dev/null; then
  97. JAVA_BIN="$link"
  98. else
  99. JAVA_BIN="`dirname "$JAVA_BIN"`/$link"
  100. fi
  101. done
  102. test -x "$JAVA_BIN" && JAVA_HOME="`dirname "$JAVA_BIN"`"
  103. test ".$JAVA_HOME" != . && JAVA_HOME=`cd "$JAVA_HOME/.." >/dev/null; pwd`
  104. else
  105. JAVA_BIN="$JAVA_HOME/bin/java"
  106. fi
  107. # Only set CATALINA_HOME if not already set
  108. test ".$CATALINA_HOME" = . && CATALINA_HOME=`cd "$DIRNAME/.." >/dev/null; pwd`
  109. test ".$CATALINA_BASE" = . && CATALINA_BASE="$CATALINA_HOME"
  110. test ".$CATALINA_MAIN" = . && CATALINA_MAIN=org.apache.catalina.startup.Bootstrap
  111. # If not explicitly set, look for jsvc in CATALINA_BASE first then CATALINA_HOME
  112. if [ -z "$JSVC" ]; then
  113. JSVC="$CATALINA_BASE/bin/jsvc"
  114. if [ ! -x "$JSVC" ]; then
  115. JSVC="$CATALINA_HOME/bin/jsvc"
  116. fi
  117. fi
  118. # Set the default service-start wait time if necessary
  119. test ".$SERVICE_START_WAIT_TIME" = . && SERVICE_START_WAIT_TIME=10
  120. # Ensure that any user defined CLASSPATH variables are not used on startup,
  121. # but allow them to be specified in setenv.sh, in rare case when it is needed.
  122. CLASSPATH=
  123. JAVA_OPTS=
  124. if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  125. . "$CATALINA_BASE/bin/setenv.sh"
  126. elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  127. . "$CATALINA_HOME/bin/setenv.sh"
  128. fi
  129. # Add on extra jar files to CLASSPATH
  130. test ".$CLASSPATH" != . && CLASSPATH="$CLASSPATH:"
  131. CLASSPATH="$CLASSPATH$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-daemon.jar"
  132. test ".$CATALINA_OUT" = . && CATALINA_OUT="$CATALINA_BASE/logs/catalina-daemon.out"
  133. test ".$CATALINA_TMP" = . && CATALINA_TMP="$CATALINA_BASE/temp"
  134. # Add tomcat-juli.jar to classpath
  135. # tomcat-juli.jar can be over-ridden per instance
  136. if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
  137. CLASSPATH="$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar"
  138. else
  139. CLASSPATH="$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar"
  140. fi
  141. # Check for the deprecated LOGGING_CONFIG
  142. # Only use it if CATALINA_LOGGING_CONFIG is not set and LOGGING_CONFIG starts with "-D..."
  143. if [ -z "$CATALINA_LOGGING_CONFIG" ]; then
  144. case $LOGGING_CONFIG in
  145. -D*) CATALINA_LOGGING_CONFIG="$LOGGING_CONFIG"
  146. esac
  147. fi
  148. # Set juli LogManager config file if it is present and an override has not been issued
  149. if [ -z "$CATALINA_LOGGING_CONFIG" ]; then
  150. if [ -r "$CATALINA_BASE/conf/logging.properties" ]; then
  151. CATALINA_LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
  152. else
  153. # Bugzilla 45585
  154. CATALINA_LOGGING_CONFIG="-Dnop"
  155. fi
  156. fi
  157. test ".$LOGGING_MANAGER" = . && LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
  158. JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
  159. # Set -pidfile
  160. test ".$CATALINA_PID" = . && CATALINA_PID="$CATALINA_BASE/logs/catalina-daemon.pid"
  161. # Increase the maximum file descriptors if we can
  162. if [ "$cygwin" = "false" ]; then
  163. MAX_FD_LIMIT=`ulimit -H -n`
  164. if [ "$?" -eq 0 ]; then
  165. # Darwin does not allow RLIMIT_INFINITY on file soft limit
  166. if [ "$darwin" = "true" ] && [ "$MAX_FD_LIMIT" = "unlimited" ]; then
  167. MAX_FD_LIMIT=`/usr/sbin/sysctl -n kern.maxfilesperproc`
  168. fi
  169. test ".$MAX_FD" = ".maximum" && MAX_FD="$MAX_FD_LIMIT"
  170. ulimit -n $MAX_FD
  171. if [ "$?" -ne 0 ]; then
  172. echo "$PROGRAM: Could not set maximum file descriptor limit: $MAX_FD"
  173. fi
  174. else
  175. echo "$PROGRAM: Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
  176. fi
  177. fi
  178. # Set UMASK unless it has been overridden
  179. if [ -z "$UMASK" ]; then
  180. UMASK="0027"
  181. fi
  182. umask $UMASK
  183. # Java 9 no longer supports the java.endorsed.dirs
  184. # system property. Only try to use it if
  185. # JAVA_ENDORSED_DIRS was explicitly set
  186. # or CATALINA_HOME/endorsed exists.
  187. ENDORSED_PROP=ignore.endorsed.dirs
  188. if [ -n "$JAVA_ENDORSED_DIRS" ]; then
  189. ENDORSED_PROP=java.endorsed.dirs
  190. fi
  191. if [ -d "$CATALINA_HOME/endorsed" ]; then
  192. ENDORSED_PROP=java.endorsed.dirs
  193. fi
  194. # ----- Execute The Requested Command -----------------------------------------
  195. case "$1" in
  196. run )
  197. shift
  198. eval exec "\"$JSVC\"" $* \
  199. "$JSVC_OPTS" \
  200. -java-home "\"$JAVA_HOME\"" \
  201. -pidfile "\"$CATALINA_PID\"" \
  202. -wait $SERVICE_START_WAIT_TIME \
  203. -umask $UMASK \
  204. -nodetach \
  205. -outfile "\"&1\"" \
  206. -errfile "\"&2\"" \
  207. -classpath "\"$CLASSPATH\"" \
  208. "\"$CATALINA_LOGGING_CONFIG\"" "$JAVA_OPTS" "$CATALINA_OPTS" \
  209. -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
  210. -Dcatalina.base="\"$CATALINA_BASE\"" \
  211. -Dcatalina.home="\"$CATALINA_HOME\"" \
  212. -Djava.io.tmpdir="\"$CATALINA_TMP\"" \
  213. $CATALINA_MAIN
  214. exit $?
  215. ;;
  216. start )
  217. eval "\"$JSVC\"" \
  218. "$JSVC_OPTS" \
  219. -java-home "\"$JAVA_HOME\"" \
  220. -user $TOMCAT_USER \
  221. -pidfile "\"$CATALINA_PID\"" \
  222. -wait $SERVICE_START_WAIT_TIME \
  223. -umask $UMASK \
  224. -outfile "\"$CATALINA_OUT\"" \
  225. -errfile "\"&1\"" \
  226. -classpath "\"$CLASSPATH\"" \
  227. "\"$CATALINA_LOGGING_CONFIG\"" "$JAVA_OPTS" "$CATALINA_OPTS" \
  228. -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
  229. -Dcatalina.base="\"$CATALINA_BASE\"" \
  230. -Dcatalina.home="\"$CATALINA_HOME\"" \
  231. -Djava.io.tmpdir="\"$CATALINA_TMP\"" \
  232. $CATALINA_MAIN
  233. exit $?
  234. ;;
  235. stop )
  236. eval "\"$JSVC\"" \
  237. "$JSVC_OPTS" \
  238. -stop \
  239. -pidfile "\"$CATALINA_PID\"" \
  240. -classpath "\"$CLASSPATH\"" \
  241. -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
  242. -Dcatalina.base="\"$CATALINA_BASE\"" \
  243. -Dcatalina.home="\"$CATALINA_HOME\"" \
  244. -Djava.io.tmpdir="\"$CATALINA_TMP\"" \
  245. $CATALINA_MAIN
  246. exit $?
  247. ;;
  248. version )
  249. "$JSVC" \
  250. -java-home "$JAVA_HOME" \
  251. -pidfile "$CATALINA_PID" \
  252. -classpath "$CLASSPATH" \
  253. -errfile "&2" \
  254. -version \
  255. -check \
  256. $CATALINA_MAIN
  257. if [ "$?" = 0 ]; then
  258. "$JAVA_BIN" \
  259. -classpath "$CATALINA_HOME/lib/catalina.jar" \
  260. org.apache.catalina.util.ServerInfo
  261. fi
  262. exit $?
  263. ;;
  264. * )
  265. echo "Unknown command: '$1'"
  266. echo "Usage: $PROGRAM ( commands ... )"
  267. echo "commands:"
  268. echo " run Start Tomcat without detaching from console"
  269. echo " start Start Tomcat"
  270. echo " stop Stop Tomcat"
  271. echo " version What version of commons daemon and Tomcat"
  272. echo " are you running?"
  273. exit 1
  274. ;;
  275. esac