本文由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实例的工作目录。如下:

我们需要把每一个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单机多实例》。

三、创建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

3.2 修改ilanni.sh文件权限

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

chmod +x ilanni.sh

四、启动与关闭tomcat

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

./ilanni.sh p2 start

./ilanni.sh p2 status

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

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

./ilanni.sh p2 stop

通过上图,我们可以看到,我们已经把实例node1、node2停掉了,而且我们也删除了实例node1、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脚本只能按照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

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

chkconfig --list |grep ilanni

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

/etc/init.d/ilanni p2 start

/etc/init.d/ilanni p2 status

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

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

烂泥:学习tomcat之通过shell批量管理多个tomcat的更多相关文章

  1. 基于CentOS的MySQL学习补充三--使用Shell批量创建数据库表

    本文出处:http://blog.csdn.net/u012377333/article/details/47006087 接上篇介绍<基于CentOS的Mysql学习补充二--使用Shell创 ...

  2. 基于CentOS的MySQL学习补充四--使用Shell批量从CSV文件里插入数据到数据表

    本文出处:http://blog.csdn.net/u012377333/article/details/47022699 从上面的几篇文章中,能够知道怎样使用Shell创建数据库.使用Shell创建 ...

  3. Shell批量启动、关闭tomcat

    批量启动tomcat脚本,配置NUM可控制启动数量 #!/bin/bash #identifier CLUSTER_HOME=/opt/cluster-tomcat TNAME=tomcat-- TP ...

  4. Fabric 源码学习:如何实现批量管理远程服务器?

    前不久,我写了一篇<Fabric教程>,简单来说,它是一个用 Python 开发的轻量级的远程系统管理工具,在远程登录服务器.执行 Shell 命令.批量管理服务器.远程部署等场景中,十分 ...

  5. Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息, 请查看服务器日志。

    错误描述: 发布时控制台出现: 部署错误: 尚未授予访问 Tomcat 服务器的权限.请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用 ...

  6. Linux-ansible批量管理

    1.ansible批量管理服务概念 (1)是基于Python语言开发的自动化软件工具 (2)是基于SSH远程管理服务实现远程主机批量管理 2.ansible批量管理服务意义 (1)提高工作的效率 (2 ...

  7. windows下运行的linux服务器批量管理工具(带UI界面)

    产生背景: 由于做服务器运维方面的工作,需要一人对近千台LINUX服务器进行统一集中的管理,如同时批量对LINUX服务器执行相关的指令.同时批量对LINUX服务器upload程序包.同时批量对LINU ...

  8. 使用ansible批量管理远程服务器

    使用ansible批量管理远程服务器 背景 本地需要管理远程的一批服务器,主要执行以下任务: 1) 将本地的文件复制到远端所有服务器: 2) 需要在远程服务器中执行一个个命令: 远端服务器路径并非完全 ...

  9. 【Python之旅】第六篇(七):开发简易主机批量管理工具

    [Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...

随机推荐

  1. Sql Server函数全解(五)之系统函数

     系统信息包括当前使用的数据库名称,主机名,系统错误消息以及用户名称等内容.使用SQL SERVER中的系统函数可以在需要的时候获取这些信息.下面介绍系统函数的作用和使用方法. 1.返回表中指定字段的 ...

  2. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)

    自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...

  3. JavaScript填坑史

    说明:  这是笔者平时积累的一些觉得比较有意思或是比较有难度的JavaScript题目理解和心得,会保持长期更新. 1.setTimeout和setInterval深入理解 在setTimeout和s ...

  4. Js apply方法详解

    我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家 ...

  5. C# GDI+ 处理文本的两个小技巧

    private void button7_Click(object sender, EventArgs e) { Graphics g = this.CreateGraphics(); g.FillR ...

  6. sessionState与会话

    HTTP 是一种无状态协议.这意味着 Web 服务器会将针对页面的每个 HTTP 请求作为独立的请求进行处理.ASP.NET 会话状态将来自限定时间范围内的同一浏览器的请求标识为一个会话,并提供用于在 ...

  7. HDU 5475(2015 ICPC上海站网络赛)--- An easy problem(线段树点修改)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5475 Problem Description One day, a useless calculato ...

  8. Eclipse导入项目出现红色叹号的解决方法

    情景: 我在另一台电脑开发Java Web项目,开发环境为 JDK 1.7,Tomcat v7.0,然后导入另一台电脑上,开发环境为为 JDK 1.8,Tomcat v8.0. 问题: 导入项目出现红 ...

  9. SpringMvc面试题

    f-sm-1. 讲下SpringMvc和Struts1,Struts2的比较的优势 性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差 ...

  10. 从零开始学 Java - log4j 项目中的详细配置

    你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...