mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			301 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			301 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # 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.
 | |
| #
 | |
| # tomcat6      This shell script takes care of starting and stopping Tomcat
 | |
| #
 | |
| # chkconfig: - 80 20
 | |
| #
 | |
| ### BEGIN INIT INFO
 | |
| # Provides: tomcat6
 | |
| # Required-Start: $network $syslog
 | |
| # Required-Stop: $network $syslog
 | |
| # Default-Start:
 | |
| # Default-Stop:
 | |
| # Description: Release implementation for Servlet 2.5 and JSP 2.1
 | |
| # Short-Description: start and stop tomcat
 | |
| ### END INIT INFO
 | |
| #
 | |
| # - originally written by Henri Gomez, Keith Irwin, and Nicolas Mailhot
 | |
| # - heavily rewritten by Deepak Bhole and Jason Corley
 | |
| #
 | |
| 
 | |
| ## Source function library.
 | |
| #. /etc/rc.d/init.d/functions
 | |
| # Source LSB function library.
 | |
| export NAME=cloud-bridge
 | |
| DESC="CloudStack-specific Tomcat servlet engine"
 | |
| export CATALINA_BASE=/usr/share/cloud/bridge
 | |
| DEFAULT=$CATALINA_BASE/conf/tomcat6.conf
 | |
| TOMCAT_USER="cloud"
 | |
| export TOMCAT_LOG="${TOMCAT_LOG:-/var/log/tomcat6/catalina.out}"
 | |
| export TOMCAT_CFG=$DEFAULT
 | |
| if [ -r "$TOMCAT_CFG" ]; then
 | |
|     . $TOMCAT_CFG
 | |
| fi
 | |
| 
 | |
| if [ -r /lib/lsb/init-functions ]; then
 | |
|     . /lib/lsb/init-functions
 | |
| else
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| DISTRIB_ID=`lsb_release -i -s 2>/dev/null`
 | |
| 
 | |
| # For SELinux we need to use 'runuser' not 'su'
 | |
| if [ -x "/sbin/runuser" ]; then
 | |
|     SU="/sbin/runuser -m"
 | |
| else
 | |
|     SU="/bin/su -m"
 | |
| fi
 | |
| 
 | |
| 
 | |
| # Get instance specific config file
 | |
| if [ -r "/etc/sysconfig/${NAME}" ]; then
 | |
|     . /etc/sysconfig/${NAME}
 | |
| fi
 | |
| 
 | |
| 
 | |
| # Path to the tomcat launch script
 | |
| TOMCAT_SCRIPT="/usr/sbin/tomcat6"
 | |
| 
 | |
| # Tomcat program name
 | |
| TOMCAT_PROG="${NAME}"
 | |
|         
 | |
| 
 | |
| RETVAL="0"
 | |
| 
 | |
| # Look for open ports, as the function name might imply
 | |
| function findFreePorts() {
 | |
|     local isSet1="false"
 | |
|     local isSet2="false"
 | |
|     local isSet3="false"
 | |
|     local lower="8000"
 | |
|     randomPort1="0"
 | |
|     randomPort2="0"
 | |
|     randomPort3="0"
 | |
|     local -a listeners="( $(
 | |
|                         netstat -ntl | \
 | |
|                         awk '/^tcp/ {gsub("(.)*:", "", $4); print $4}'
 | |
|                     ) )"
 | |
|     while [ "$isSet1" = "false" ] || \
 | |
|           [ "$isSet2" = "false" ] || \
 | |
|           [ "$isSet3" = "false" ]; do
 | |
|         let port="${lower}+${RANDOM:0:4}"
 | |
|         if [ -z `expr " ${listeners[*]} " : ".*\( $port \).*"` ]; then
 | |
|             if [ "$isSet1" = "false" ]; then
 | |
|                 export randomPort1="$port"
 | |
|                 isSet1="true"
 | |
|             elif [ "$isSet2" = "false" ]; then
 | |
|                 export randomPort2="$port"
 | |
|                 isSet2="true"
 | |
|             elif [ "$isSet3" = "false" ]; then
 | |
|                 export randomPort3="$port"
 | |
|                 isSet3="true"
 | |
|             fi
 | |
|         fi
 | |
|     done
 | |
| }
 | |
| 
 | |
| function makeHomeDir() {
 | |
|     if [ ! -d "$CATALINA_HOME" ]; then
 | |
|         echo "$CATALINA_HOME does not exist, creating"
 | |
|         if [ ! -d "/usr/share/${NAME}" ]; then
 | |
|             mkdir /usr/share/${NAME}
 | |
|             cp -pLR /usr/share/tomcat6/* /usr/share/${NAME}
 | |
|         fi
 | |
|         mkdir -p /var/log/${NAME} \
 | |
|                  /var/cache/${NAME} \
 | |
|                  /var/tmp/${NAME}
 | |
|         ln -fs /var/cache/${NAME} ${CATALINA_HOME}/work
 | |
|         ln -fs /var/tmp/${NAME} ${CATALINA_HOME}/temp
 | |
|         cp -pLR /usr/share/${NAME}/bin $CATALINA_HOME
 | |
|         cp -pLR /usr/share/${NAME}/conf $CATALINA_HOME
 | |
|         ln -fs /usr/share/java/tomcat6 ${CATALINA_HOME}/lib
 | |
|         ln -fs /usr/share/tomcat6/webapps ${CATALINA_HOME}/webapps
 | |
|         chown ${TOMCAT_USER}:${TOMCAT_USER} /var/log/${NAME}
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function parseOptions() {
 | |
|     options=""
 | |
|     options="$options $(
 | |
|                  awk '!/^#/ && !/^$/ { ORS=" "; print "export ", $0, ";" }' \
 | |
|                  $TOMCAT_CFG
 | |
|              )"
 | |
|     if [ -r "/etc/sysconfig/${NAME}" ]; then
 | |
|         options="$options $(
 | |
|                      awk '!/^#/ && !/^$/ { ORS=" "; 
 | |
|                                            print "export ", $0, ";" }' \
 | |
|                      /etc/sysconfig/${NAME}
 | |
|                  )"
 | |
|     fi
 | |
|     TOMCAT_SCRIPT="$options ${TOMCAT_SCRIPT}"
 | |
| }
 | |
| 
 | |
| # See how we were called.
 | |
| function start() {
 | |
|     echo -n "Starting ${TOMCAT_PROG}: "
 | |
|     if [ -f "/var/lock/subsys/${NAME}" ] ; then
 | |
|         if [ -f "/var/run/${NAME}.pid" ]; then
 | |
|             read kpid < /var/run/${NAME}.pid
 | |
| #           if checkpid $kpid 2>&1; then
 | |
|             if [ -d "/proc/${kpid}" ]; then
 | |
|                 log_success_msg
 | |
|                 if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then
 | |
|                     echo
 | |
|                 fi
 | |
|                 return 0
 | |
|             fi
 | |
|         fi
 | |
|     fi
 | |
|     # fix permissions on the log and pid files
 | |
|     export CATALINA_PID="/var/run/${NAME}.pid"
 | |
|     touch $CATALINA_PID
 | |
|     chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID
 | |
|     touch $TOMCAT_LOG
 | |
|     chown ${TOMCAT_USER}:${TOMCAT_USER} $TOMCAT_LOG
 | |
|     if [ "$CATALINA_HOME" != "/usr/share/tomcat6" ]; then
 | |
|         # Create a tomcat directory if it doesn't exist
 | |
|         makeHomeDir
 | |
|         # If CATALINA_HOME doesn't exist modify port number so that
 | |
|         # multiple instances don't interfere with each other
 | |
|         findFreePorts
 | |
|         sed -i -e "s/8005/${randomPort1}/g" -e "s/8080/${CONNECTOR_PORT}/g" \
 | |
|             -e "s/8009/${randomPort2}/g" -e "s/8443/${randomPort3}/g" \
 | |
|             ${CATALINA_HOME}/conf/server.xml
 | |
|     fi
 | |
|     parseOptions
 | |
|     if [ "$SECURITY_MANAGER" = "true" ]; then
 | |
|         $SU $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security" \
 | |
|             >> $TOMCAT_LOG 2>&1
 | |
|     else
 | |
|         $SU $TOMCAT_USER -c "${TOMCAT_SCRIPT} start" >> $TOMCAT_LOG 2>&1
 | |
|     fi
 | |
|     RETVAL="$?"
 | |
|     if [ "$RETVAL" -eq 0 ]; then 
 | |
|         log_success_msg
 | |
|         touch /var/lock/subsys/${NAME}
 | |
|     else
 | |
|         log_failure_msg
 | |
|     fi
 | |
|     if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then
 | |
|         echo
 | |
|     fi
 | |
|     return $RETVAL
 | |
| }
 | |
| 
 | |
| function stop() {
 | |
|     RETVAL="0"
 | |
|     echo -n "Stopping ${TOMCAT_PROG}: "
 | |
|     if [ -f "/var/lock/subsys/${NAME}" ]; then
 | |
|         parseOptions
 | |
|         $SU $TOMCAT_USER -c "${TOMCAT_SCRIPT} stop" >> $TOMCAT_LOG 2>&1
 | |
|         RETVAL="$?"
 | |
|         if [ "$RETVAL" -eq "0" ]; then
 | |
|             count="0"
 | |
|             if [ -f "/var/run/${NAME}.pid" ]; then
 | |
|                 read kpid < /var/run/${NAME}.pid
 | |
|                 until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] || \
 | |
|                       [ "$count" -gt "$SHUTDOWN_WAIT" ]; do
 | |
|                     if [ "$SHUTDOWN_VERBOSE" = "true" ]; then
 | |
|                         echo "waiting for processes $kpid to exit"
 | |
|                     fi
 | |
|                     sleep 1
 | |
|                     let count="${count}+1"
 | |
|                 done
 | |
|                 if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then
 | |
|                     if [ "$SHUTDOWN_VERBOSE" = "true" ]; then
 | |
|                         echo "killing processes which didn't stop after $SHUTDOWN_WAIT seconds"
 | |
|                     fi
 | |
|                     kill -9 $kpid
 | |
|                 fi
 | |
|                 log_success_msg
 | |
|             fi
 | |
|             rm -f /var/lock/subsys/${NAME} /var/run/${NAME}.pid
 | |
|         else
 | |
|             log_failure_msg
 | |
|         fi
 | |
|     else
 | |
|         log_success_msg
 | |
|     fi
 | |
|     if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then
 | |
|         echo
 | |
|     fi
 | |
|     return $RETVAL
 | |
| }
 | |
| 
 | |
| # See how we were called.
 | |
| case "$1" in
 | |
|     start)
 | |
|         start
 | |
|         ;;
 | |
|     stop)
 | |
|         stop
 | |
|         ;;
 | |
|     restart)
 | |
|         stop
 | |
|         start
 | |
|         ;;
 | |
|     condrestart|try-restart)
 | |
|         if [ -f "/var/run/${NAME}.pid" ]; then
 | |
|             stop
 | |
|             start
 | |
|         fi
 | |
|         ;;
 | |
|     reload)
 | |
|         RETVAL="3"
 | |
|         ;;
 | |
|     force-reload)
 | |
|         if [ -f "/var/run/${NAME}.pid" ]; then
 | |
|             stop
 | |
|             start
 | |
|         fi
 | |
|         ;;
 | |
|     status)
 | |
|         if [ -f "/var/run/${NAME}.pid" ]; then
 | |
| #           status ${NAME}
 | |
| #           RETVAL="$?"
 | |
|             read kpid < /var/run/${NAME}.pid
 | |
|             if [ -d "/proc/${kpid}" ]; then
 | |
|                 echo "${NAME} (pid ${kpid}) is running..."
 | |
|                 RETVAL="0"
 | |
|             fi
 | |
|         else
 | |
|             pid="$(/usr/bin/pgrep -d , -u ${TOMCAT_USER} -G ${TOMCAT_USER} java)"
 | |
|             if [ -z "$pid" ]; then
 | |
| #               status ${NAME}
 | |
| #               RETVAL="$?"
 | |
|                 echo "${NAME} is stopped"
 | |
|                 RETVAL="3"
 | |
|             else
 | |
|                 echo "${NAME} (pid $pid) is running..."
 | |
|                 RETVAL="0"
 | |
|             fi
 | |
|         fi
 | |
|         ;;
 | |
|     version)
 | |
|         ${TOMCAT_SCRIPT} version
 | |
|         ;;
 | |
|     *)
 | |
|         echo "Usage: $0 {start|stop|restart|condrestart|try-restart|reload|force-reload|status|version}"
 | |
|         RETVAL="2"
 | |
| esac
 | |
| 
 | |
| exit $RETVAL
 |