多Tomcat 啓動/中止/重啓 腳本【第三版】

腳本功能html

使用標籤方式 啓動、中止、重啓 多個Tomcat實例java


腳本使用說明linux

1.假設Tomcat都安裝在/usr/local下,那麼Tomcat的命名方式是這樣子 tomcat1 tomcat2 tomcat3 tomcat4 ...apache

2.使用方式: 腳本路徑 標籤1|標籤2  start|stop|restart|statusbootstrap

case ${GROUP_NAME} in
    gp1 )
        TOMCATS="1 2"
        ;;
    gp2 )
        TOMCATS="3 4"
        ;;
    *   )
        usage
        ;;
esac

3.例如: gp1 標籤表明是 tomcat1 tomcat2, gp2 標籤表明的是 tomcat3 tomcat4api

4.使用時請修改標籤的名稱tomcat

5.適用於 Tomcat5 Tomcat6 版本bash


腳本運行效果:curl


腳本內容以下:ide

#!/bin/bash
# -------------------------------------------------------------------------------------------
# 腳本功能
# 使用標籤方式 啓動、中止、重啓 多個Tomcat實例
# 腳本使用說明
# 1.假設Tomcat都安裝在/usr/local下,那麼Tomcat的命名方式是這樣子 tomcat1 tomcat2 tomcat3 tomcat4 ...
# 2.使用方式: 腳本路徑 標籤1|標籤2  start|stop|restart|status
# 3.例如: gp1 標籤表明是 tomcat1 tomcat2, gp2 標籤表明的是 tomcat3 tomcat4
# 4.使用時請修改標籤的名稱
# 5.適用於 Tomcat5 Tomcat6
# 關於腳本
# 做者: 雷納科斯
# 博客: http://linux5588.blog.51cto.com
# 郵箱: chanyipiaomiao@163.com
# 日期: 2013-07-04
# -------------------------------------------------------------------------------------------
# 定義變量
export JAVA_HOME=/usr/local/java                # 輸出JAVA_HOME變量
JAVA_BIN="${JAVA_HOME}/bin/java"                # JAVA可執行程序路徑
TOMCATS_HOME="/usr/local"                       # 全部的Tomcat安裝的目錄
SCRIPT_NAME=$0                                  # 腳本絕對路徑
GROUP_NAME=$1                                   # 命令行第一個參數
START_STOP=$2                                   # 命令行第二個參數
HOST="127.0.0.1"                                # 本機地址用於測試本機Tomcat是否已經啓動完成
STATUS="200 301 302"                            # 定義正常訪問返回的狀態碼
URI="/index.html"                               # 定義測試的URI
BACKGROUD="\033[37m"                            # echo 時的 背景顏色
FONTCOLOR="\033[33m"                            # echo 時的 字體顏色
END="\033[0m"                                   # echo 時的 結束標誌
JAVA_OPTS=""                                    # JAVA啓動選項,爲空就是默認啓動選項
#JAVA_OPTS="-server -Xms512m -Xmx512m -XX:PermSize=16m -XX:MaxPermSize=64m -XX:MaxNewSize=64m \
#                                               -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC"
# 幫助提示函數
usage(){
    echo
    echo "Usage: ${SCRIPT_NAME} gp1|gp2 start|stop|restart|status"
    echo
    exit 1
}
# 判斷命令行參數是否爲空,若是爲空,調用幫助提示函數
if [[ ${GROUP_NAME} == "" || ${START_STOP} == "" ]]; then
    usage
fi
# 判斷命令行第一個參數,第一個參數爲要啓動的Tomcat分組,這裏的1 2 3 4是表明的是tomcat1 tomcat2 tomcat3 tomcat4
# 使用時 請修改這裏
case ${GROUP_NAME} in
    gp1 )
        TOMCATS="1 2"
        ;;
    gp2 )
        TOMCATS="3 4"
        ;;
    *   )
        usage
        ;;
esac
# 獲取PID函數
getPID(){
    PID=$(ps -ef | grep -v 'grep' | grep "${TOMCAT_NAME}/conf/logging.properties" | awk '{print $2}')
}
# 單個Tomcat啓動函數
startSingleTomcat(){
    TOMCAT_OPTS="-Djava.util.logging.config.file=${TOMCATS_HOME}/${TOMCAT_NAME}/conf/logging.properties \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.endorsed.dirs=${TOMCATS_HOME}/${TOMCAT_NAME}/common/endorsed \
    -Dcatalina.base=${TOMCATS_HOME}/${TOMCAT_NAME} \
    -Dcatalina.home=${TOMCATS_HOME}/${TOMCAT_NAME} \
    -Djava.io.tmpdir=${TOMCATS_HOME}/${TOMCAT_NAME}/temp \
    -classpath :${TOMCATS_HOME}/${TOMCAT_NAME}/bin/bootstrap.jar:${TOMCATS_HOME}/${TOMCAT_NAME}/bin/commons-logging-api.jar \
    org.apache.catalina.startup.Bootstrap start"
    TOMCAT_LOG="${TOMCATS_HOME}/${TOMCAT_NAME}/logs/catalina.out"
    ${JAVA_BIN} ${JAVA_OPTS} ${TOMCAT_OPTS} > ${TOMCAT_LOG} 2>&1 &
    echo $! > /tmp/${TOMCAT_NAME}.pid
}
# 輸出顏色
printColor(){
    echo -ne "${BACKGROUD}${GROUP_NAME}${END} ==> [ ${FONTCOLOR}${TOMCAT_NAME}${END} ] "
}
# 輸出正在啓動Tomcat
printStart(){
    printColor
    echo -n "is starting Please Wait "
}
# 輸出正在中止Tomcat
printStop(){
    printColor
    echo "is stopping,Please wait ..."
}
# 輸出Tomcat沒有運行
printNotRun(){
    printColor
    echo "is not running..."
}
# 輸出Tomcat正在運行
printRunning(){
    printColor
    echo "is running... PID: ${PID}"
}
# 輸出Tomcat沒有,試圖啓動Tomcat
printNotRunTryStart(){
    printColor
    echo "is not running, trying start ${TOMCAT_NAME}"
}
# sleep 函數
sleepFun(){
    sleep 0.5
}
# 獲得端口
getPort(){
    PORT=`cat ${TOMCATS_HOME}/${TOMCAT_NAME}/conf/server.xml | awk '/HTTP\/1.1/ {print $2}' | cut -d'"' -f2`
}
# 測試端口是否能夠正常訪問
testPortIsOk(){
    PORT_OK=1
    status=`/usr/bin/curl -I $1 2>/dev/null | head -1 | cut -d" " -f2`
    for i in $STATUS; do
        if [[ ${i} == ${status} ]]; then
            PORT_OK=0
        fi
    done
    return ${PORT_OK}
}
# 檢查每一個Tomcat是否已經啓動好
checkTomcat(){
    status_ok=1
    while [[ ${status_ok} == 1 ]]; do
        testPortIsOk http://${HOST}:${PORT}${URI}
        if [[ $? == 0 ]]; then
            echo " start OK!"
            status_ok=0
        else
            echo -n "."
        fi
    done
}
# Tomcat啓動函數
start(){
    for i in ${TOMCATS}; do
        TOMCAT_NAME="tomcat${i}"
        getPID
        getPort
        if [[ "${PID}X" != "X" ]]; then
            printRunning
        else
            startSingleTomcat
            printStart
            checkTomcat
        fi
    done
}
# Tomcat中止函數
stop(){
    for i in ${TOMCATS}; do
        TOMCAT_NAME="tomcat${i}"
        getPID
        if [[ "${PID}X" == "X" ]]; then
            printNotRun
        else
            kill -9 $PID
            printStop
            sleepFun
        fi
    done
}
# Tomcat重啓函數
restart(){
    for i in ${TOMCATS}; do
        TOMCAT_NAME="tomcat${i}"
        getPID
        getPort
        if [[ "${PID}X" == "X" ]]; then
            printNotRunTryStart
            startSingleTomcat
            printStart
            checkTomcat
        else
            kill -9 $PID
            printStop
            sleepFun
            startSingleTomcat
            printStart
            checkTomcat
        fi
    done
}
# 獲取Tomcat狀態函數
status(){
    for i in ${TOMCATS}; do
        TOMCAT_NAME="tomcat${i}"
        getPID
        if [[ "${PID}X" == "X" ]]; then
            printNotRun
        else
            printRunning
        fi
    done
}
# 判斷命令行第二個參數
case ${START_STOP} in
    start   )
        start
        ;;
    stop    )
        stop
        ;;
    restart )
        restart
        ;;
    status  )
        status
        ;;
    *       )
        usage
        ;;
esac
相關文章
相關標籤/搜索