#!/bin/sh # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # /etc/init.d/tomcat5.5 -- startup script for the Tomcat 5 servlet engine # # Written by Miquel van Smoorenburg . # Modified for Debian GNU/Linux by Ian Murdock . # Modified for Tomcat by Stefan Gybas . # ### BEGIN INIT INFO # Provides: tomcat # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start Tomcat. # Description: Start the Tomcat servlet engine. ### END INIT INFO set -e PATH=/bin:/usr/bin:/sbin:/usr/sbin NAME=tomcat5.5 DESC="Tomcat servlet engine" DAEMON=/usr/bin/jsvc CATALINA_HOME=/usr/share/$NAME DEFAULT=/etc/default/$NAME if [ `id -u` -ne 0 ]; then echo "You need root privileges to run this script" exit 1 fi # Make sure tomcat is started with system locale if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG fi . /lib/lsb/init-functions . /etc/default/rcS # The following variables can be overwritten in $DEFAULT # Run Tomcat 5 as this user ID TOMCAT5_USER=tomcat55 # Always use sun java JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun # Put it into the environment for jsvc export JAVA_HOME # Directory for per-instance configuration files and webapps CATALINA_BASE=/var/lib/$NAME # Use the Java security manager? (yes/no) TOMCAT5_SECURITY=yes # Timeout in seconds for the shutdown of all webapps TOMCAT5_SHUTDOWN=30 # End of variables that can be overwritten in $DEFAULT # overwrite settings from default file if [ -f "$DEFAULT" ]; then . "$DEFAULT" fi test -f $DAEMON || exit 0 [ -z "$TOMCAT5_USER" ] && TOMCAT5_USER=tomcat55 # Initialize our variables EXTRACLASS="" DEFINESET="" BASESIZE=768 # Only do our stuff on start if [ "$1" == "start" ] ; then # METACARTA: do not start tomcat5 if mid install or mid upgrade if [ -e /INSTALL-IN-PROGRESS ]; then echo "Not starting $DESC because /INSTALL-IN-PROGRESS" exit 0 fi if [ -e /var/run/metacarta/UPGRADE_IN_PROGRESS ]; then echo "Not starting $DESC because /var/run/metacarta/UPGRADE_IN_PROGRESS" exit 0 fi for webappfile in $(ls -1 /usr/lib/metacarta/java-webapps) do webappname=$(cat /usr/lib/metacarta/java-webapps/"$webappfile" | tr -d "\n") rm -f /var/lib/tomcat5.5/webapps/"$webappname"/WEB-INF/lib/xxx-* for filename in $(ls -1 /usr/lib/metacarta/java-environment) do cp /usr/lib/metacarta/java-environment/"$filename" /var/lib/tomcat5.5/webapps/"$webappname"/WEB-INF/lib/xxx-"$filename" done done # Set specified variables for filename in $(ls -1 /usr/lib/metacarta/java-vars) do export "$filename"=$(cat /usr/lib/metacarta/java-vars/"$filename" | tr -d "\n") done # Pull together extra jar files into webapps for jarfile in $(ls -1 /usr/lib/metacarta/java-common) do EXTRACLASS="$EXTRACLASS":/usr/lib/metacarta/java-common/"$jarfile" done # Do extra classpath stuff for filename in $(ls -1 /usr/lib/metacarta/java-classpath) do EXTRACLASS="$EXTRACLASS":$(cat /usr/lib/metacarta/java-classpath/"$filename" | tr -d "\n") done # Do defines for filename in $(ls -1 /usr/lib/metacarta/java-defines) do TERM=-D"$filename"=$(cat /usr/lib/metacarta/java-defines/"$filename" | tr -d "\n") DEFINESET="$DEFINESET $TERM" done # Find memory base size. Start with tomcat minimum... for filename in $(ls -1 /var/lib/metacarta/tomcat-base-sizes) do SIZE=$(cat /var/lib/metacarta/tomcat-base-sizes/"$filename" | tr -d "\n") if ((SIZE>BASESIZE)); then BASESIZE=$SIZE fi done # Add up incremental sizes for filename in $(ls -1 /var/lib/metacarta/tomcat-incremental-sizes) do SIZE=$(cat /var/lib/metacarta/tomcat-incremental-sizes/"$filename" | tr -d "\n") BASESIZE=$((BASESIZE+SIZE)) done fi JAVALIBPATH="$JAVA_HOME"/jre/lib/i386/client:"$JAVA_HOME"/jre/lib/i386:"$JAVA_HOME"/lib/i386:/usr/lib JAVA_OPTS="-XX:HeapDumpPath=/common/metacarta/java-heap-dumps -XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless=true -Xmx"$BASESIZE"m -Xms256m -XX:NewRatio=1 $DEFINESET -Djava.library.path=$JAVALIBPATH" JAVA_TMPDIR=/common/metacarta/java-temp-tomcat # Check if we use gij gij=no "$JAVA_HOME/bin/java" -version 2>&1 | grep -q "^gij (GNU libgcj)" && gij=yes # gij doesn't support a security manager yet (see bug #399595) if [ "$gij" = "yes" ]; then printf "The java-gcj-compat-dev environment currently doesn't\nsupport a security manager. See README.Debian." | logger -p daemon.warning -t $NAME fi # Set java.awt.headless=true if JAVA_OPTS is not set so the # Xalan XSL transformer can work without X11 display on JDK 1.4+ # It also looks like the default heap size of 64M is not enough for most cases # se the maximum heap size is set to 128M if [ -z "$JAVA_OPTS" ]; then JAVA_OPTS="-Djava.awt.headless=true -Xmx128M" fi JAVA_OPTS="$JAVA_OPTS -Djava.endorsed.dirs=$CATALINA_HOME/common/endorsed -Dcatalina.base=$CATALINA_BASE -Dcatalina.home=$CATALINA_HOME -Djava.io.tmpdir=$JAVA_TMPDIR" # Set the JSP compiler if set in the tomcat5.5.default file if [ -n "$JSP_COMPILER" ]; then JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=$JSP_COMPILER" fi if [ "$TOMCAT5_SECURITY" = "yes" ]; then JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy=$CATALINA_BASE/conf/catalina.policy" fi # juli LogManager disabled if running under gij (see bug #395167) if [ "$gij" != "yes" ]; then JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" fi # Define other required variables CATALINA_PID="/var/run/$NAME.pid" BOOTSTRAP_CLASS=org.apache.catalina.startup.Bootstrap JSVC_CLASSPATH="/usr/share/java/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar$EXTRACLASS" # Look for Java Secure Sockets Extension (JSSE) JARs if [ -z "${JSSE_HOME}" -a -r "${JAVA_HOME}/jre/lib/jsse.jar" ]; then JSSE_HOME="${JAVA_HOME}/jre/" fi export JSSE_HOME case "$1" in start) if [ -z "$JAVA_HOME" ]; then log_failure_msg "no JDK found - please set JAVA_HOME" exit 1 fi if [ ! -d "$CATALINA_BASE/conf" ]; then log_failure_msg "invalid CATALINA_BASE specified" exit 1 fi log_daemon_msg "Starting $DESC" "$NAME" if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user $TOMCAT5_USER --startas "$JAVA_HOME/bin/java" \ >/dev/null; then # Create catalina.policy (for the security manager) rm -f "$CATALINA_BASE/conf/catalina.policy" umask 022 echo "// AUTO-GENERATED FILE -- DO NOT EDIT!" \ > "$CATALINA_BASE/conf/catalina.policy" echo "// Edit the files in /etc/tomcat5.5/policy.d/ instead" \ >> "$CATALINA_BASE/conf/catalina.policy" echo "" >> "$CATALINA_BASE/conf/catalina.policy" cat /etc/tomcat5.5/policy.d/*.policy \ >> "$CATALINA_BASE/conf/catalina.policy" # Clean up and set permissions on required files find "$JAVA_TMPDIR"/ -mindepth 1 -exec rm -fr {} + REQUIRED_FILES='"$CATALINA_BASE/conf" "$CATALINA_BASE/logs" "$JAVA_TMPDIR" "$CATALINA_BASE/webapps" "$CATALINA_BASE/work"' if [ -e "$CATALINA_BASE/conf/tomcat-users.xml" ]; then REQUIRED_FILES=$REQUIRED_FILES' "$CATALINA_BASE/conf/tomcat-users.xml"' fi eval chown --dereference "$TOMCAT5_USER" $REQUIRED_FILES \ || true cd "$JAVA_TMPDIR" # Work around debian bug #446827 by telling the # linker/loader to look in jre/lib/i386 as we for # *.so's. It is unclear why setting java.library.path # isn't sufficient for jre/lib/i386/libawt.so to # subsequently load jre/lib/i386/libmlib_image.so # (maybe because java.library.path only applies to the # initial JNI load and not the subsequent JNI so's), # but this appears to be the way a number of people # work around this issue so we do it here as well. LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/i386/ \ $DAEMON -user "$TOMCAT5_USER" -cp "$JSVC_CLASSPATH" \ -outfile SYSLOG -errfile SYSLOG \ -pidfile "$CATALINA_PID" $JAVA_OPTS "$BOOTSTRAP_CLASS" >/dev/null 2>&1 else log_progress_msg "(already running)" fi log_end_msg 0 ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user "$TOMCAT5_USER" --startas "$JAVA_HOME/bin/java" \ >/dev/null; then log_progress_msg "(not running)" else $DAEMON -cp "$JSVC_CLASSPATH" -pidfile "$CATALINA_PID" \ -stop "$BOOTSTRAP_CLASS" fi log_end_msg 0 ;; status) if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user $TOMCAT5_USER --startas "$JAVA_HOME/bin/java" \ >/dev/null; then if [ -f "$CATALINA_PID" ]; then log_success_msg "$DESC is not running, but pid file exists." else log_success_msg "$DESC is not running." fi else log_success_msg "$DESC is running with pid `cat $CATALINA_PID`" fi ;; restart|force-reload) if start-stop-daemon --test --stop --pidfile "$CATALINA_PID" \ --user $TOMCAT5_USER --startas "$JAVA_HOME/bin/java" \ >/dev/null; then $0 stop sleep 1 fi $0 start ;; try-restart) if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user $TOMCAT5_USER --startas "$JAVA_HOME/bin/java" \ >/dev/null; then $0 start fi ;; *) log_success_msg "Usage: $0 {start|stop|restart|try-restart|force-reload|status}" exit 1 ;; esac exit 0