zoukankan      html  css  js  c++  java
  • 烂泥:学习tomcat之通过shell批量管理多个tomcat

    本文由ilanniweb提供友情赞助,首发于烂泥行天下

    想要获得更多的文章,可以关注我的微信ilanniweb

    公司的业务是使用tomcat做web容器,为了更有效的利用服务器的性能,我们一般部署多个tomcat做业务的负载均衡。

    一、业务需求

    目前一台服务器上,部署了4个tomcat,也就相当于4个节点。平时在维护业务时,需要我们一个一个tomcat实例进行单独的维护,感觉很不方便,所以就有了这篇文章。

    但是为了更方便的管理这4个tomcat,我这边做了两方面的工作,一是把所有的tomcat工作目录都指向另外单独的一个目录下,二是通过shell来启动、关闭和重启tomcat。

    PS:本次实验的测试OS为centos6.5 64bit,但是shell脚本也可以在ubuntu下使用。

    二、修改tomcat工作目录

    为了不一个一个单独的维护tomcat实例,首先我们来修改tomcat实例的工作目录。所有的tomcat配置文件位于conf目录下的server.xml文件。

    我们只需要修改server.xml文件的appBase配置项,这样就可以指定tomcat实例的工作目录。如下:

    lip_image001[4]

    我们需要把每一个tomcat实例server.xml配置文件的appBase配置项,修改为/app/tomcat/apiwebapps。

    以上修改完毕后,我们需要创建/app/tomcat/apiwebapps目录。

    mkdir -p /app/tomcat/apiwebapps

    tree -L 3 /app/

    lip_image002[4]

    现在我们可以查看node1为例,查看该tomcat实例的目录结构,如下:

    tree -L 1 ./node1

    lip_image003[4]

    注意:这4个tomcat所监听的端口是不同的,否则无法启动tomcat。

    有关tomcat的单机多实例,可以看我的下一篇文章《烂泥:学习tomcat之tomcat单机多实例》。

    三、创建shell脚本

    现在我是把4个tomcat实例都放到/app/tomcat目录下, 这4个tomcat实例目录名称分别为node1、node2、node3、node4。 可以看出这4个tomcat实例的命名规则为node${i}。现在开始编写shell脚本。

    3.1 新建ilanni.sh脚本

    新建一个shell文件命名为 ilanni.sh,内容如下:

    #!/bin/bash

    # Apache Tomcat daemon

    # chkconfig: 345 10 10

    # description: Apache Tomcat daemon

    # processname: tomcat

    echo "  ______                           __   "

    echo " /_  __/___  ____ ___  _________ _/ /_  "

    echo "  / / / __ / __  __ / ___/ __  / __/  "

    echo " / / / /_/ / / / / / / /__/ /_/ / /_    "

    echo "/_/  \____/_/ /_/ /_/\___/\__,_/\__/    "

    echo "                                        "

    #定义JAVA_HOME

    export JAVA_HOME=/usr/local/java/jdk1.7.0_80

    #定义多个tomcat的总目录,/app/tomcat目录下有node1、node2、node3、node4 四个tomcat实例。

    tom="/app/tomcat/node"

    #定义启动脚本路径

    startup_bin="bin/startup.sh"

    #定义tomcat的启动方式,启动方式为tomcat.sh p1 start类似的命令

    usage="{p1|p2|p3|all} {start|stop|restart|status}"

    dev="/dev/null"

    #定义如何启动tomcat,在此我们是通过个数tomcat以及前面定义的tomcat的命令,来操作tomcat

    #judge $1 $2 whether null

    if [ "$1" == "" -o "$2" == "" ];then

        echo

         echo "Usage: $0 $usage"

        echo

    exit 1

    fi

    #judge $1

    case $1 in

       "p1")

        tomcats="1"

    ;;

       "p2")

        tomcats="1 2"

    ;;

       "p3")

        tomcats="1 2 3"

    ;;

       "all")

        tomcats="1 2 3 4"

    ;;

       *)

       echo "Usage: $0 $usage"

    ;;

    esac

    #定义tomcat的启动

    #define start function

    tomcatstart() {

    for i in $tomcats

      do

      tom_home="$tom$i"

      run_status=$(ps -ef | grep -v 'grep' | egrep "java.*=${tom_home}")

    if [ "${run_status}X" != "X" ];then

    echo "node$i is already running..."

    else

    ${tom_home}/${startup_bin} &>$dev

    echo "node$i starting,Please wait 2s..."

    sleep 2

    fi

    done

    }

    #定义tomcat的关闭

    #define stop function

    tomcatstop() {

    for j in $tomcats

    do

    tom1_home="$tom$j"

    tomcat_pid=$(ps -ef | grep ${tom1_home} | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $2}')

    if [ "${tomcat_pid}X" == "X" ];then

    echo "node$j is not running..."

    else

    kill -9 ${tomcat_pid} & >$dev

    echo "node$j stopping,Please wait 1s..."

    sleep 1

    echo "delte node$j cache,Please wait 1s..."

    rm -rf ${tom1_home}/work/*

    fi

    done

    }

    #定义tomcat的重启

    #define restart function

    tomcatrestart() {

    for m in $tomcats

    do

    tom2_home="$tom$m"

    run2_status=$(ps -ef | grep -v 'grep' | egrep "java.*=${tom2_home}")

    if [ "${run2_status}X" == "X" ];then

    echo "node$m is not running..."

    ${tom2_home}/${startup_bin} &>$dev

    echo "node$m starting,Please wait 2s..."

    sleep 2

    else

    ps -ef | grep ${tom2_home} | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $2}'| xargs kill -9 >$dev

    echo "node$m stopping,Please wait 2s..."

    sleep 1

    ${tom2_home}/${startup_bin} &>$dev

    echo "node$m starting,Please wait 2s..."

    sleep 2

    fi

    done

    }

    #定义tomcat的状态

    #define status function

    tomcatstatus() {

    for n in $tomcats

    do

    tom3_home="$tom$n"

    run3_status=$(ps -ef | grep -v 'grep' | egrep "java.*=${tom3_home}")

    if [ "${run3_status}X" == "X" ];then

    echo "node$n is not running..."

    else

    echo "node$n is running"

    fi

    done

    }

    #judge $2

    case $2 in

        "start")

        tomcatstart

    ;;

        "stop")

        tomcatstop

    ;;

       "restart")

       tomcatrestart

    ;;

       "status")

       tomcatstatus

    ;;

       *)

       echo "Usage: $0 $usage"

    ;;

    esac

    lip_image004[4]

    3.2 修改ilanni.sh文件权限

    ilanni.sh脚本创建完毕后,现在我们来修改ilanni.sh的执行权限。如下:

    chmod +x ilanni.sh

    lip_image005[4]

    四、启动与关闭tomcat

    ilanni.sh权限修改完毕之后,我们就可以来启动这4个tomcat实例了。比如现在想启动node1和node2这两个实例,我们可以通过以下命令来启动。

    ./ilanni.sh p2 start

    ./ilanni.sh p2 status

    lip_image006[4]

    通过上图,可以很明显的看出实例node1、node2已经启动了。

    tomcat启动后,如果要停止的话,我们可以使用如下命令:

    ./ilanni.sh p2 stop

    lip_image007[4]

    通过上图,我们可以看到,我们已经把实例node1、node2停掉了,而且我们也删除了实例node1、node2的缓存。

    以上我们是以启动两个tomcat实例为例的,如果启动或者关闭是一个、三个以及所有tomcat实例的话,我们可以使用如下命令。

    ./ilanni.sh p1 start

    lip_image008[4]

    ./ilanni.sh p3 start

    ./ilanni.sh all start

    当然相应的关闭、重启和查看状态命令,分别如下。

    关闭命令:

    ./ilanni.sh p1 stop

    lip_image009[4]

    ./ilanni.sh p3 stop

    ./ilanni.sh all stop

    查看状态命令:

    ./ilanni.sh p1 status

    lip_image010[4]

    ./ilanni.sh p3 status

    ./ilanni.sh all status

    注意:该shell脚本只能按照node1、node2、node3、node4等依次执行下去,不能单独的停止和启动tomcat实例,除node1外。

    五、把ilanni脚本加入系统服务

    为了操作更方便,我们可以把ilanni.sh这个脚本加入到系统服务中。具体操作方法如下:

    cp ilanni.sh /etc/init.d/ilanni

    chkconfig --add /etc/init.d/ilanni

    chkconfig ilanni on

    lip_image011[4]

    查看是否已添加进服务列表

    chkconfig --list |grep ilanni

    lip_image012[4]

    添加到服务以后, 就可以这样以服务方式来启动和停止、重启tomcat实例了。如下:

    /etc/init.d/ilanni p2 start

    /etc/init.d/ilanni p2 status

    lip_image013[4]

    通过上图,我们可以出,ilanni.sh脚本已经就加入到系统服务之中了。

    到此有关通过shell批量管理tomcat的文章就结束了。

  • 相关阅读:
    育碧-彩虹六号如何绑定二次验证码/两步验证/身份验证?
    leetcode刷题-95/96/98
    leetcode刷题-94二叉树的中序遍历
    leetcode刷题-93复原IP地址
    leetcode刷题-91解码方法
    leetcode刷题-90子集 II
    leetcode刷题-89格雷编码
    leetcode刷题-88.合并两个有序数组
    leetcode刷题-86分隔链表
    leetcode刷题-82.删除排序链表中的重复元素 II
  • 原文地址:https://www.cnblogs.com/ilanni/p/5153035.html
Copyright © 2011-2022 走看看