tomcat 多实例的Sys V风格脚本

  1 #!/bin/sh
  2 #
  3 # function: Tomcat mutil instance init script for Linux.
  4 # author:
  5 #          QQ:765482322
  6 #          mail: [email protected]
  7 # notice:
  8 #        1.如果tomcat实例是在同一个目录下,那么只需要修改此脚本中 "export CATALINA_BASE=(path)/$instance_name"
  9 #          中的path为你所有实例的父目录即可,--instance= 选项就可以使用相对路径
 10 #       2.如果tomcat实例不在同一个目录下,那么只需要修改此脚本中 "export CATALINA_BASE=$instance_name"
 11 #          --instance= 选项后面就得跟实例的绝对路径
 12 #       3.把此脚本放到/usr/local/bin/ 并重名命为tomcat-multi,注意修改其他用户有执行权限
 13
 14 # 定义java的相关变量
 15 export JAVA_HOME=/usr/java/latest
 16
 17 # define function
 18 # 脚本命令使用语法检测
 19 syntax_check(){
 20     if [ $arg_count -ne 2 ];then
 21         help_info
 22         exit 1
 23     fi
 24     option && action || (help_info;exit 1)
 25 }
 26
 27 # 打印脚本使用帮助信息
 28 help_info(){
 29 cat|grep --color ".*" << EOF
 30 Usage: tomcat-multil <OPTION>... <action>
 31
 32   OPTION:
 33      --instance=NAME       Add an instance Name must be an instance of the home directory
 34
 35   action:
 36      start                 Run an instance
 37      stop                  Stop an instance
 38      restart               Restart an instance
 39      configtest            Check configure file
 40      status                Show an instance status
 41 EOF
 42 }
 43
 44 # 根据给定的参数判断用户对tomcat实例所要执行的动作
 45 action(){
 46 run_action=("start" "stop" "restart" "configtest" "status")
 47 local i=1
 48 while [ $i -le 2 ];do
 49         for j in ${run_action[*]};do
 50             if [ ${arg[$i-1]} == $j ];then
 51                 hit_action=$j;break
 52             else
 53                 continue
 54             fi
 55         done
 56         if [ -n "$hit_action" ];then
 57         #echo "hit_action=$hit_action"
 58             break
 59         else
 60             let i++
 61         fi
 62 done
 63 if [ -z "$hit_action" ];then
 64     help_info
 65     exit 1
 66 fi
 67
 68 }
 69
 70 # 通过选项--instance 得到tomcat实例所在路径
 71 option() {
 72     local i=1
 73     while [ $i -le 2 ];do
 74         if echo ${arg[$i-1]} | egrep -i "(^--instance=)" &> /dev/null;then
 75             instance_name=$(echo ${arg[$i-1]} | sed -r ‘s/--instance=(.*)/\1/‘)
 76             break
 77         else
 78             let i++
 79         fi
 80     done
 81     if [ -z "$instance_name" ];then
 82         help_info
 83         exit 1
 84     fi
 85 }
 86
 87 # 启动tomcat实例
 88 start(){
 89     $CATALINA_HOME/bin/startup.sh &> /dev/null
 90     sleep 2
 91     if ps -ef | grep "java" | grep "$CATALINA_HOME" &> /dev/null ;then
 92         echo -e "Starting tomcat instance $instance_name:                    \033[32m[  OK  ]\033[0m"
 93     #   echo $tomcat_getpid | bash > $pidfile
 94     else
 95         echo -e "Starting tomcat instance $instance_name:                    \033[31m[FAILED]\033[0m"
 96     exit 1
 97     fi
 98 }
 99
100 # 停止tomcat实例,注意有时使用catalina.sh 执行 stop不成功,所以加了层判断,如果使用catalina.sh 关闭不了进程,就使用kill杀死进程
101 stop(){
102     $CATALINA_HOME/bin/shutdown.sh &> /dev/null
103     sleep 2
104     if ps -ef | grep "java" | grep "$CATALINA_HOME" &> /dev/null;then
105         ps -ef | grep "java" | grep "$CATALINA_HOME" | awk ‘{print $2}‘ | xargs kill -9 &> /dev/null
106             if [ $? -eq 0 ];then
107                 echo -e "Stopping tomcat instance $instance_name:                    \033[32m[  OK  ]\033[0m"
108             else
109                 echo -e "Stopping tomcat instance $instance_name:                    \033[31m[FAILED]\033[0m"
110                 exit 2
111             fi
112     else
113         echo -e "Stopping tomcat instance $instance_name:                    \033[32m[  OK  ]\033[0m"
114     fi
115 }
116
117 # 重启tomcat实例
118 restart(){
119     $CATALINA_HOME/bin/configtest.sh &> /dev/null
120     if [ $? -eq 0 ];then
121         if ps -ef | grep "java" | grep "$CATALINA_HOME" &> /dev/null ;then
122             stop
123         else
124             echo -e "Stopping tomcat instance $instance_name:                    \033[31m[FAILED]\033[0m"
125         fi
126
127         start
128     else
129         exit 2
130     fi
131 }
132
133 # 查看tomcat实例状态
134 status(){
135     if ps -ef | grep "java" | grep "$CATALINA_HOME" &> /dev/null;then
136         ps -ef | grep "java" | grep "$CATALINA_HOME" | awk ‘{print $2}‘ | while read java_pid;do
137             echo -e "\033[32mOK: tomcat instance $instance_name is running ($java_pid)\033[0m"
138         done
139         return 0
140     else
141         echo -e "\033[31mWarning: tomcat instance $instance_name is not running\033[0m"
142         return 2
143     fi
144 }
145
146 # tomcat实例配置文件测试
147 configtest(){
148    $CATALINA_HOME/bin/configtest.sh
149 }
150
151
152 # main
153 # 根据函数syntax确定tomcat实例的家目录
154 arg_count=$#
155 arg=("$1" "$2")
156 syntax_check
157 export CATALINA_HOME=/usr/local/tomcat/instance/$instance_name
158
159 #
160 case $hit_action in
161 start)
162     if ps -ef | grep "java" | grep "$CATALINA_HOME" &> /dev/null ;then
163         echo -e "\033[32mNotice: Service tomcat instance $instance_name is running ...\033[0m"
164         exit 1
165     else
166         start
167     fi
168     ;;
169
170 stop)
171     if ps -ef | grep "java" | grep "$CATALINA_HOME" &> /dev/null ;then
172         stop
173     else
174         echo -e "\033[31mWarning: Service tomcat instance $instance_name is stopped\033[0m"
175     fi
176     ;;
177
178 restart)
179     restart
180     ;;
181
182 status)
183     status
184     ;;
185
186 configtest)
187     configtest
188     ;;
189
190 *)
191     help_info
192 esac   
实例操作:

 1.查看一个实例的状态

 

2.查看帮助信息,没有使用-h选项,不过你可以故意给错选项来查看 ,提供了比较简单地几个选项

 

3.多实例操作,需要以下的脚本,你可以把它保存并重名命为tomcatd,然后把它扔到/etc/init.d/tomcatd ,确保其有执行权限。

 1 #!/bin/bash
 2 #
 3 # chkconfig: 2345 99 21
 4 # description: tomcat multi instance init scripts
 5
 6 # 通过instance数组把你要启动的tomcat实例写在这里
 7 instance=("tomcat8001" "tomcat8002")
 8
 9 # 该服务需要用到的执行程序
10 prog=/usr/local/bin/tomcat-multi
11
12 # 通过for循环遍历数组内的实例名称启动多个实例
13 case $1 in
14 start)
15     for i in ${instance[*]};do $prog  --instance=$i start;done
16     ;;
17
18 stop)
19     for i in ${instance[*]};do $prog  --instance=$i stop;done
20     ;;
21
22 restart)
23     for i in ${instance[*]};do $prog  --instance=$i restart;done
24     ;;
25
26 configtest)
27     for i in ${instance[*]};do $prog  --instance=$i configtest;done
28     ;;
29
30 status)
31     for i in ${instance[*]};do $prog  --instance=$i status;done
32     ;;
33                                                                        

总结:

     @解决tomcat多实例在部署应用程序后每个手动重启。

     @通过status 选项查看tomcat实例在线情况

     @实现tomcat多实例集中管理,当然通过tomcat-multi 可以实现单实例管理

     @脚本有不合适地方,还请大家给予指出,这里只是给大家一个模板

时间: 2024-10-01 03:07:50

tomcat 多实例的Sys V风格脚本的相关文章

tomcat多实例启动和关闭脚本

1.tomcat启动脚本 #!/bin/sh# description: 启动tomcat多实例.. /etc/init.d/functionsRETVAL=$? # tomcat实例目录export CATALINA_BASE="$PWD" # tomcat安装目录export CATALINA_HOME="/var/opt/tomcat" # 可选export JVM_OPTIONS="-Xms128m -Xmx1024m -XX:PermSize=1

tengine反向代理tomcat多实例实现负载均衡

目录 1.引语 2.jdk与tomcat的安装 3.tomcat多实例配置与测试 4.tengine安装与负载均衡配置 5.整体测试 6.思考和优化tomcat配置流程 7.总结 1.引语 有没有这样一种情况,你在一台服务器跑了一个tomcat实例,当有一天你发现不管你怎么优化tomcat,它的并发能力处理能力始终上不去了,而你服务器的硬件资源还有一部份剩余时,这时你就得采用tomcat启用多实例的方式,让剩下的硬件资源也一起利用起来,让用户的请求分摊到多个实例上来处理,这样只要硬件资源允许能大

分享一个批量导出当前实例下的所有linkedserver脚本

原文:分享一个批量导出当前实例下的所有linkedserver脚本 分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linkedserver导出来,但是密码不会显示出来 下面脚本在SQL2008 R2下面测试通过 -- ============================================= -- Author: <桦仔> -- Blog

JAVA+Tomcat多实例配置

tomcat需要配合java环境来运行,所以我们需要先安装java(我这里使用的是java1.7.0版本) 一.准备工作:下载java1.7.0压缩包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.将下载的JDK源码包解压,并拷贝到指定目录 mkdir /usr/local/java #创建jdk存放目录 tar xf jdk-7u79-linux-x64.tar.gz#

Tomcat多实例集群架构 安全优化和性能优化

Tomcat多实例 复制tomcat目录 #将tar解压出来的tomcat复制出两个实例来cp -a /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat1 cp -a /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat2 修改多实例配置文件 #创建多实例的网页根目录 mkdir -p /data/www/www/ROOT #修改多实例配置文件的以下三行 vim /usr/local/tomcat/co

tomcat 多实例做

tomcat 多实例做解压部署tomcat程序tar xf apache-tomcat-8.9.16.tar.gzmv apache-tomcat-8.9.16  /usr/local/创建实例一个mkdir -p /usr/local/tomcat_instance/tomcat1拷贝程序目录下的conf文件放入个实例中cp -R /usr/local/apache-tomcat-8.9.16/conf/ /usr/local/tomcat_instance/tomcat1在实例中创建启动脚本

Nginx+Tomcat多实例负载均衡

业务需求 1.在一台服务器上创建3个Tomcat实例 2.Nginx服务器负责调度Tomcat服务器 3.它的域名是:tomcat.zjzd.cn 1.IP地址规划 172.16.30.1     Nginx 172.16.30.2     Tomcat 172.16.30.254   Windows 172.16.30.2 Tomcat 2.安装JDK并配置环境 #/etc/init.d/iptables stop #setenforce 0 #wget http://download.ora

Substance风格实例大全javaswing皮肤风格大全(原)

转载请注明来路:http://www.cnblogs.com/langtianya/ 下图是所支持的设置 下面把上面的每一个选项的子选项进行试验 substance皮肤: AutumnSkin BusinessSkin BusinessBlackSteelSkin BusinessBlueSteelSkin ChallengerDeepSkin CremeSkin EmeraldDuskSkin FieldOfWheatSkin FindingNemoSkin GreenMagicSkin Ma

老大有需求--tomcat多实例运行

原因: 开发之前用的是tomcat7环境,部署的有项目.后来老大让弄一个新项目,需要tomcat1.6.由于两个环境要求部署在一台服务器,而之前环境还要运行,于是tomcat多实例终于派上用场了. 注意事项: 1.软链接要不一样,否则会混淆. 2.环境变量要分开,单独配置. 3.启动文件要指明所需要的jdk和tomcat目录 操作: 略...很简单.