不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

守护模式启动脚本改进2020/2/21

Posted on 2022-02-21 16:46  三年三班王小朋  阅读(32)  评论(0编辑  收藏  举报

守护模式启动脚本改进2020/2/21

  1. catalina_home需要有deamon.sh启动脚本
  2. 脚本放到logs,config,work,temp,work,webapps同级目录,即catalina_base目录下且添加执行权限
  3. 通过daemonServer.sh init初始化脚本,选择合适的JAVA_HOME,CATALINA_HOME,CATALINA_BASE和PROG
  4. 通过daemonServer.sh upgrade更新脚本需要把war包放到脚本同级目录上

vim daemonServer.sh

# !/bin/bash
# description: tomcat daemon script
# chkconfig: 2345 10 90
# auther by wangxp

#java和catalina相关目录设置
export JAVA_HOME=/u01/java_home/jdk1.8.0_181
export CATALINA_HOME=/u01/catalina_home/apache-tomcat-9.0.46
export CATALINA_BASE=/u01/znsf/tomcat_8901
#启动用户
export CATALINA_USER=root
#程序名称
export PROG=tomcat_8901
#服务启动等待时间
export CATALINA_SERVICE_START_WAIT_TIME=10
#进程pid号
export CATALINA_PID=$CATALINA_BASE/conf/$PROG.pid


CURRENT_DATE=$(date +%Y%m%d)
CURRENT_TIME=$(date +%Y%m%d%H%M%S)
CURRENT_PATH=`pwd`

. /etc/rc.d/init.d/functions
tomcatfun(){
cd $CATALINA_HOME/bin
./daemon.sh \
--java-home $JAVA_HOME \
--catalina-home $CATALINA_HOME \
--catalina-base $CATALINA_BASE \
--catalina-pid $CATALINA_PID \
--tomcat-user $CATALINA_USER \
--service-start-wait-time $CATALINA_SERVICE_START_WAIT_TIME $1
cd $CURRENT_PATH
}

#检查各种路径是否正确
function check
{
if [ `whoami` != $CATALINA_USER ];then
echo -e "you must use \033[31m$CATALINA_USER\033[0m to excute"
fi
if test ! -d $JAVA_HOME;then
echo -e "\033[31mError\033[0m: JAVA_HOME is not available"
fi
if test ! -d $CATALINA_HOME;then
echo -e "\033[31mError\033[0m: CATALINA_HOME is not available"
fi
if test ! -d $CATALINA_BASE;then
echo -e "\033[31mError\033[0m: CATALINA_BASE is not available"
fi
}

case "$1" in
    start)
    echo "Starting Tomcat..." 
    tomcatfun start
    if [ -f $CATALINA_PID ]; then
    echo -e "$PROG is \033[32mActive\033[0m"
    echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
    else
    echo -e "$PROG started failed"
    fi
    ;;
    stop)
    echo "Stopping Tomcat..." 
    tomcatfun stop
    if [ -f $CATALINA_PID ]; then
    echo "$PROG stopped failed"
    else
    echo -e "$PROG is \033[31mDead\033[0m"
    fi
    ;;
    restart)
    echo "restarting Tomcat..." 
    tomcatfun stop
    sleep 1
    tomcatfun start
    if [ -f $CATALINA_PID ]; then
    echo -e "$PROG is \033[32mActive\033[0m"
    echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
    else
    echo -e "$PROG is \033[31mDead\033[0m"
    fi
    ;;
    status)
    if [ -f $CATALINA_PID ]; then
    echo -e "$PROG is \033[32mActive\033[0m"
    echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
    else
    echo -e "$PROG is \033[31mDead\033[0m"
    fi
    ;;
    upgrade)
    ##检查最新打包文件是否已经上传
        #生成war包数组
        war_name_num=`find $CURRENT_PATH -maxdepth 1 -type f -name "*.war"| wc -l`
        if test $war_name_num -ge 1;then
        for(( i=0; i< ${war_name_num} ; i++ ))
        do
        war_name=`find $CURRENT_PATH -maxdepth 1 -type f -name  "*.war" |awk "NR==($i+1)"`
        wars[$i]=${war_name##*/}
        done
        else
    echo "update source is not exist"
        exit 1
        fi
        #选择war包
        PS3="Select update source: "
        select a in ${wars[@]}
        do
        if test -z $a;then
        echo "Input error!"
        exit 1
    fi
    war_name=$a
        break
        done
    #判断备份文件是否存在,不存在创建备份文件夹,然后停止项目
    if test ! -d ${CATALINA_BASE}/backup/project/${CURRENT_DATE};then
            mkdir -p ${CATALINA_BASE}/backup/project/${CURRENT_DATE}
    fi
    if test ! -d ${CATALINA_BASE}/backup/logs/${CURRENT_DATE};then
            mkdir -p ${CATALINA_BASE}/backup/logs/${CURRENT_DATE}
    fi
    #停止项目
    echo "Stopping Tomcat..."
    tomcatfun stop
    sleep 1
    if [ -f $CATALINA_PID ]; then
    echo "$PROG stopped failed"
    exit 1
    else
    echo -e "$PROG is \033[31mDead\033[0m"
    fi
    #拷贝日志和项目到备份文件夹
    unzip -qod ${war_name%.*} ${war_name}
    if test -f $CATALINA_BASE/logs/catalina-daemon.out;
    then    
    mv $CATALINA_BASE/logs/catalina-daemon.out ${CATALINA_BASE}/backup/logs/${CURRENT_DATE}/catalina-daemon.out-${CURRENT_TIME}
    if [ $? -eq 0 ];then
    echo "log backup complate. file:${CATALINA_BASE}/backup/logs/${CURRENT_DATE}/catalina-daemon.out-${CURRENT_TIME}"
    else
    echo "log backup failed!"
    exit
    fi
    else 
    echo "log/catalina-daemon.out is not exist"
    fi

    if test -d $CATALINA_BASE/webapps/${war_name%.*};
    then
    mv $CATALINA_BASE/webapps/${war_name%.*} ${CATALINA_BASE}/backup/project/${CURRENT_DATE}/${war_name%.*}-${CURRENT_TIME}
    if [ $? -eq 0 ];then
    echo "projet backup complate. file:${CATALINA_BASE}/backup/project/${CURRENT_DATE}/${war_name%.*}-${CURRENT_TIME}"
    else
    echo "project back failed!"
    exit
    fi
    else
    echo "webapps/${war_name%.*} is not exist"
    fi
    #移动项目
    mv ${CATALINA_BASE}/${war_name%.*} ${CATALINA_BASE}/webapps
    if [ $? -ne 0 ];then
    echo "'mv' ${PROG}.war failed!"
    exit
    fi
    #启动项目
    echo "Starting Tomcat..." 
    tomcatfun start
    if [ -f $CATALINA_PID ]; then
    echo -e "$PROG is \033[32mActive\033[0m"
    echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
    else
    echo -e "$PROG started failed"
    fi
    ;;
    log)
    if test -f ${CATALINA_BASE}/logs/catalina-daemon.out
    then
    tail -500f ${CATALINA_BASE}/logs/catalina-daemon.out
    else
    echo "${CATALINA_BASE}/logs/catalina-daemon.out is not found"
    fi
    ;;
    init)
    echo "daemonServer.sh init..."
    #生成JAVA_HOME和CATALINA_HOME数组
    java_home_dir=`find / -maxdepth 2 -type d -name java_home|awk 'NR==1'`
    java_home_num=`find $java_home_dir -type d -name "jre" 2>/dev/null | wc -l`
    if test $java_home_num -ge 1;then
    for(( i=0; i< ${java_home_num} ; i++ ))
    do
    jre_home=`find $java_home_dir -type d -name 'jre' 2>/dev/null|awk "NR==($i+1)"`
    javas[$i]=${jre_home%/*}
    done
    else
    exit 1
    fi
    catalina_home_dir=`find / -maxdepth 2 -type d -name catalina_home|awk 'NR==1'`
    catalina_home_num=`find $catalina_home_dir -type f -name "daemon.sh" 2>/dev/null | wc -l`
    if test $catalina_home_num -ge 1;then
    for(( i=0; i< ${catalina_home_num} ; i++ ))
    do
    catalina_home=`find $catalina_home_dir -type f -name "daemon.sh"|awk "NR==($i+1)"`
    catalinas[$i]=${catalina_home%/bin*}
    done
    else
    exit 1
    fi
    #设置JAVA_HOME
    PS3="Select JAVA_HOME: "
    select a in ${javas[@]}
    do
    if test -z $a
    then
    echo "Input error!"
    exit 1
    fi
    sed -r -i "s&^export JAVA_HOME=.*&export JAVA_HOME=${a}&g" $0
    echo -e "\033[32mJAVA_HOME=${a}\033[0m"
    break
    done
    #设置CATALINA_HOME
    PS3="Select CATALINA_HOME: "
    select a in ${catalinas[@]}
    do
    if test -z $a
    then
    echo "Input error!"
    exit 1
    fi
    sed -r -i "s&^export CATALINA_HOME=.*&export CATALINA_HOME=${a}&g" $0
    echo -e "\033[32mCATALINA_HOME=${a}\033[0m"
    break
    done
    #设置CATALINA_BASE
    read -p "Set CATALINA_BASE=${CURRENT_PATH} (yes|1)? " INPUT
    while true;do
    case $INPUT in
    1|yes)
    sed -r -i "s&^export CATALINA_BASE=.*&export CATALINA_BASE=$CURRENT_PATH&g" $0
    echo -e "\033[32mCATALINA_HOME=$CURRENT_PATH\033[0m"
    break
    ;;
    *)
    echo  "Input ERROR!"
    exit 1
    esac
    done
    #设置PROG
    prog=${CURRENT_PATH##*/}
    read -p "Set PROG=$prog (yes|1)? " INPUT
    while true;do
    case $INPUT in
    1|yes)
    sed -r -i "s&^export PROG=.*&export PROG=$prog&g" $0
    echo -e "\033[32mPROG=$prog\033[0m"
    break
    ;;
    *)
    echo  "Input ERROR!"
    exit 1
    esac
    done
    echo "daemonServer.sh initialized successfully"
    ;;    
    *)
    echo "Usage: $PROG {start|stop|restart|status|upgrade|log|init}"
    ;;
esac
exit 0