#!/bin/sh # # /etc/init.d/tomcat6 -- startup script for the Tomcat 6 servlet engine # 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. ### BEGIN INIT INFO # Provides: tomcat-vmops # 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 (CloudStack). # Description: Start the Tomcat servlet engine that runs the CloudStack Management Server. ### END INIT INFO PATH=/bin:/usr/bin:/sbin:/usr/sbin NAME=cloudstack-management DESC="CloudStack-specific Tomcat servlet engine" DAEMON=/usr/bin/jsvc CATALINA_HOME=/usr/share/cloudstack/management DEFAULT=/etc/cloudstack/management/tomcat6.conf JVM_TMP=/tmp/$NAME-temp # We have to explicitly set the HOME variable to the homedir from the user "cloud" # This is because various scripts run by the management server read the HOME variable # and fail when this init script is run manually. HOME=$(echo ~cloud) 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 6 as this user ID TOMCAT6_USER=tomcat6 # The first existing directory is used for JAVA_HOME (if JAVA_HOME is not # defined in $DEFAULT) JDK_DIRS="/usr/lib/jvm/java-1.6.0-openjdk-amd64/ /usr/lib/jvm/java-1.6.0-openjdk-i386/ /usr/lib/jvm/java-1.6.0-openjdk/ /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun" # Look for the right JVM to use for jdir in $JDK_DIRS; do if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then JAVA_HOME="$jdir" fi done export JAVA_HOME # Directory for per-instance configuration files and webapps CATALINA_BASE=/usr/share/cloudstack/management # Use the Java security manager? (yes/no) TOMCAT6_SECURITY=no # Default Java options # 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 # so the maximum heap size is set to 128M if [ -z "$JAVA_OPTS" ]; then JAVA_OPTS="-Djava.awt.headless=true -Xmx128M" fi # End of variables that can be overwritten in $DEFAULT # overwrite settings from default file if [ -f "$DEFAULT" ]; then . "$DEFAULT" fi if [ ! -f "$CATALINA_HOME/bin/bootstrap.jar" ]; then log_failure_msg "$NAME is not installed" exit 1 fi [ -f "$DAEMON" ] || exit 0 POLICY_CACHE="$CATALINA_BASE/work/catalina.policy" JAVA_OPTS="$JAVA_OPTS -Djava.endorsed.dirs=$CATALINA_HOME/endorsed -Dcatalina.base=$CATALINA_BASE -Dcatalina.home=$CATALINA_HOME -Djava.io.tmpdir=$JVM_TMP" # Set the JSP compiler if set in the tomcat6.default file if [ -n "$JSP_COMPILER" ]; then JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=$JSP_COMPILER" fi if [ "$TOMCAT6_SECURITY" = "yes" ]; then JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy=$POLICY_CACHE" fi # Set juli LogManager if logging.properties is provided if [ -r "$CATALINA_BASE"/conf/logging.properties ]; 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" JSVC_CLASSPATH=$CLASSPATH:$JSVC_CLASSPATH # 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: $CATALINA_BASE" exit 1 fi log_daemon_msg "Starting $DESC" "$NAME" if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user $TOMCAT6_USER --startas "$JAVA_HOME/bin/java" \ >/dev/null; then # Regenerate POLICY_CACHE file umask 022 echo "// AUTO-GENERATED FILE from /etc/tomcat6/policy.d/" \ > "$POLICY_CACHE" echo "" >> "$POLICY_CACHE" if ls $CATALINA_BASE/conf/policy.d/*.policy > /dev/null 2>&1 ; then cat $CATALINA_BASE/conf/policy.d/*.policy \ >> "$POLICY_CACHE" fi # Remove / recreate JVM_TMP directory rm -rf "$JVM_TMP" mkdir "$JVM_TMP" || { log_failure_msg "could not create JVM temporary directory" exit 1 } chown $TOMCAT6_USER "$JVM_TMP" cd "$JVM_TMP" # fix storage issues on nfs mounts umask 000 $DAEMON -user "$TOMCAT6_USER" -cp "$JSVC_CLASSPATH" \ -outfile SYSLOG -errfile SYSLOG \ -pidfile "$CATALINA_PID" $JAVA_OPTS "$BOOTSTRAP_CLASS" sleep 5 if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user $TOMCAT6_USER --startas "$JAVA_HOME/bin/java" \ >/dev/null; then log_end_msg 1 else log_end_msg 0 fi else log_progress_msg "(already running)" log_end_msg 0 fi ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user "$TOMCAT6_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 rm -rf "$JVM_TMP" log_end_msg 0 ;; status) if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ --user $TOMCAT6_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." exit 1 else log_success_msg "$DESC is not running." exit 3 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 $TOMCAT6_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 $TOMCAT6_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