本文由ilanniweb提供友情赞助,首发于烂泥行天下java
想要得到更多的文章,能够关注个人微信ilanniwebnode
公司的业务是使用tomcat作web容器,为了更有效的利用服务器的性能,咱们通常部署多个tomcat作业务的负载均衡。web
1、业务需求shell
目前一台服务器上,部署了4个tomcat,也就至关于4个节点。平时在维护业务时,须要咱们一个一个tomcat实例进行单独的维护,感受很不方便,因此就有了这篇文章。apache
可是为了更方便的管理这4个tomcat,我这边作了两方面的工做,一是把全部的tomcat工做目录都指向另外单独的一个目录下,二是经过shell来启动、关闭和重启tomcat。ubuntu
PS:本次实验的测试OS为centos6.5 64bit,可是shell脚本也能够在ubuntu下使用。centos
2、修改tomcat工做目录api
为了避免一个一个单独的维护tomcat实例,首先咱们来修改tomcat实例的工做目录。全部的tomcat配置文件位于conf目录下的server.xml文件。缓存
咱们只须要修改server.xml文件的appBase配置项,这样就能够指定tomcat实例的工做目录。以下:tomcat
咱们须要把每个tomcat实例server.xml配置文件的appBase配置项,修改成/app/tomcat/apiwebapps。
以上修改完毕后,咱们须要建立/app/tomcat/apiwebapps目录。
mkdir -p /app/tomcat/apiwebapps
tree -L 3 /app/
如今咱们能够查看node1为例,查看该tomcat实例的目录结构,以下:
tree -L 1 ./node1
注意:这4个tomcat所监听的端口是不一样的,不然没法启动tomcat。
有关tomcat的单机多实例,能够看个人下一篇文章《烂泥:学习tomcat之tomcat单机多实例》。
3、建立shell脚本
如今我是把4个tomcat实例都放到/app/tomcat目录下, 这4个tomcat实例目录名称分别为node一、node二、node三、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目录下有node一、node二、node三、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
3.2 修改ilanni.sh文件权限
ilanni.sh脚本建立完毕后,如今咱们来修改ilanni.sh的执行权限。以下:
chmod +x ilanni.sh
4、启动与关闭tomcat
ilanni.sh权限修改完毕以后,咱们就能够来启动这4个tomcat实例了。好比如今想启动node1和node2这两个实例,咱们能够经过如下命令来启动。
./ilanni.sh p2 start
./ilanni.sh p2 status
经过上图,能够很明显的看出实例node一、node2已经启动了。
tomcat启动后,若是要中止的话,咱们可使用以下命令:
./ilanni.sh p2 stop
经过上图,咱们能够看到,咱们已经把实例node一、node2停掉了,并且咱们也删除了实例node一、node2的缓存。
以上咱们是以启动两个tomcat实例为例的,若是启动或者关闭是一个、三个以及全部tomcat实例的话,咱们可使用以下命令。
./ilanni.sh p1 start
./ilanni.sh p3 start
./ilanni.sh all start
固然相应的关闭、重启和查看状态命令,分别以下。
关闭命令:
./ilanni.sh p1 stop
./ilanni.sh p3 stop
./ilanni.sh all stop
查看状态命令:
./ilanni.sh p1 status
./ilanni.sh p3 status
./ilanni.sh all status
注意:该shell脚本只能按照node一、node二、node三、node4等依次执行下去,不能单独的中止和启动tomcat实例,除node1外。
5、把ilanni脚本加入系统服务
为了操做更方便,咱们能够把ilanni.sh这个脚本加入到系统服务中。具体操做方法以下:
cp ilanni.sh /etc/init.d/ilanni
chkconfig --add /etc/init.d/ilanni
chkconfig ilanni on
查看是否已添加进服务列表
chkconfig --list |grep ilanni
添加到服务之后, 就能够这样以服务方式来启动和中止、重启tomcat实例了。以下:
/etc/init.d/ilanni p2 start
/etc/init.d/ilanni p2 status
经过上图,咱们能够出,ilanni.sh脚本已经就加入到系统服务之中了。
到此有关经过shell批量管理tomcat的文章就结束了。