tomcat 多实例的Sys V风格脚本
-------------------------------------------------[翠花,上脚本]-------------------------------------------------------------------------------
#!/bin/sh
#
# function: Tomcat mutil instance init script for Linux.
# author:
# QQ:765482322
# mail: login_532_gajun@sina.com
# notice:
# 1.如果tomcat实例是在同一个目录下,那么只需要修改此脚本中 "export CATALINA_BASE=(path)/$instance_name"
# 中的path为你所有实例的父目录即可,--instance= 选项就可以使用相对路径
# 2.如果tomcat实例不在同一个目录下,那么只需要修改此脚本中 "export CATALINA_BASE=$instance_name"
# --instance= 选项后面就得跟实例的绝对路径
# 3.把此脚本放到/usr/local/bin/ 并重名命为tomcat-multi,注意修改其他用户有执行权限 # 定义java的相关变量
export JAVA_HOME=/usr/java/latest # define function
# 脚本命令使用语法检测
syntax_check(){
if [ $arg_count -ne 2 ];then
help_info
exit 1
fi
option && action || (help_info;exit 1)
} # 打印脚本使用帮助信息
help_info(){
cat|grep --color ".*" << EOF
Usage: tomcat-multil <OPTION>... <action> OPTION:
--instance=NAME Add an instance Name must be an instance of the home directory action:
start Run an instance
stop Stop an instance
restart Restart an instance
configtest Check configure file
status Show an instance status
print_log Print tomcat instance run log
EOF
} # 根据给定的参数判断用户对tomcat实例所要执行的动作
action(){
run_action=("start" "stop" "restart" "configtest" "status" "print_log")
local i=1
while [ $i -le 2 ];do
for j in ${run_action[*]};do
if [ ${arg[$i-1]} == $j ];then
hit_action=$j;break
else
continue
fi
done
if [ -n "$hit_action" ];then
#echo "hit_action=$hit_action"
break
else
let i++
fi
done
if [ -z "$hit_action" ];then
help_info
exit 1
fi } # 通过选项--instance 得到tomcat实例所在路径
option() {
local i=1
while [ $i -le 2 ];do
if echo ${arg[$i-1]} | egrep -i "(^--instance=)" &> /dev/null;then
instance_name=$(echo ${arg[$i-1]} | sed -r 's/--instance=(.*)/\1/')
break
else
let i++
fi
done
if [ -z "$instance_name" ];then
help_info
exit 1
fi
} # 启动tomcat实例
start(){
$CATALINA_HOME/bin/startup.sh &> /dev/null
sleep 2
if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then
echo -e "Starting tomcat instance $instance_name: \033[32m[ OK ]\033[0m"
# echo $tomcat_getpid | bash > $pidfile
else
echo -e "Starting tomcat instance $instance_name: \033[31m[FAILED]\033[0m"
exit 1
fi
} # 停止tomcat实例,注意有时使用catalina.sh 执行 stop不成功,所以加了层判断,如果使用catalina.sh 关闭不了进程,就使用kill杀死进程
stop(){
$CATALINA_HOME/bin/shutdown.sh &> /dev/null
sleep 2
if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null;then
ps -ef | grep "java" | grep -w "$CATALINA_HOME" | awk '{print $2}' | xargs kill -9 &> /dev/null
if [ $? -eq 0 ];then
echo -e "Stopping tomcat instance $instance_name: \033[32m[ OK ]\033[0m"
else
echo -e "Stopping tomcat instance $instance_name: \033[31m[FAILED]\033[0m"
exit 2
fi
else
echo -e "Stopping tomcat instance $instance_name: \033[32m[ OK ]\033[0m"
fi
} # 重启tomcat实例
restart(){
$CATALINA_HOME/bin/configtest.sh &> /dev/null
if [ $? -eq 0 ];then
if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then
stop
else
echo -e "Stopping tomcat instance $instance_name: \033[31m[FAILED]\033[0m"
fi start
else
exit 2
fi
} # 查看tomcat实例状态
status(){
if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null;then
ps -ef | grep "java" | grep -w "$CATALINA_HOME" | awk '{print $2}' | while read java_pid;do
echo -e "\033[32mOK: tomcat instance $instance_name is running ($java_pid)\033[0m"
done
return 0
else
echo -e "\033[31mWarning: tomcat instance $instance_name is not running\033[0m"
return 2
fi
} # tomcat实例配置文件测试
configtest(){
$CATALINA_HOME/bin/configtest.sh
} # 打印tomcat启动日志
print_log(){
local exit_code
whiptail --title "Print Yes/No Log" --yesno "Choose between Yes and No." 10 60
exit_code=`echo $?`
if [ $exit_code -eq 0 ];then
echo -e "\033[32m====================[$instance_name Log]=======================================\033[0m"
tailf $CATALINA_HOME/logs/catalina.out
else
return 1
fi
}
# main
# 根据函数syntax确定tomcat实例的家目录
arg_count=$#
arg=("$1" "$2")
syntax_check
#export CATALINA_HOME=/usr/local/tomcat/instance/$instance_name
export CATALINA_HOME=/opt/tomc_instance/$instance_name #
case $hit_action in
start)
if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then
echo -e "\033[32mNotice: Service tomcat instance $instance_name is running ...\033[0m"
exit 1
else
start
sleep 0.3
print_log
fi
;; stop)
if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then
stop
sleep 0.3
print_log
else
echo -e "\033[31mWarning: Service tomcat instance $instance_name is stopped\033[0m"
fi
;; restart)
restart
sleep 0.3
print_log
;; status)
status
;; configtest)
configtest
;; print_log)
print_log
;; *)
help_info
esac
实例操作:
1.查看一个实例的状态

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

3.多实例操作,需要以下的脚本,你可以把它保存并重名命为tomcatd,然后把它扔到/etc/init.d/tomcatd ,确保其有执行权限。
#!/bin/bash
#
# chkconfig:
# description: tomcat multi instance init scripts # 通过instance数组把你要启动的tomcat实例写在这里
instance=("tomcat8001" "tomcat8002") # 该服务需要用到的执行程序
prog=/usr/local/bin/tomcat-multi # 通过for循环遍历数组内的实例名称启动多个实例
case $ in
start)
for i in ${instance[*]};do $prog --instance=$i start;done
;; stop)
for i in ${instance[*]};do $prog --instance=$i stop;done
;; restart)
for i in ${instance[*]};do $prog --instance=$i restart;done
;; configtest)
for i in ${instance[*]};do $prog --instance=$i configtest;done
;; status)
for i in ${instance[*]};do $prog --instance=$i status;done
;;

4. 启动并打印日志


总结:
@解决tomcat多实例在部署应用程序后每个手动重启。
@通过status 选项查看tomcat实例在线情况
@实现tomcat多实例集中管理,当然通过tomcat-multi 可以实现单实例管理
@脚本有不合适地方,还请大家给予指出,这里只是给大家一个模板
tomcat 多实例的Sys V风格脚本的更多相关文章
- Tomcat多实例单应用部署方案 (转)
一.Tomcat部署的场景分析 通常,我们对tomcat部署需求可以分为几种:单实例单应用,单实例多应用,多实例单应用,多实例多应用. 对于第一种场景,如果不要求周期性地维护tomcat版本,一般的做 ...
- Tomcat多实例部署
前言 以前总是采用很Low的方式太同一台服务器上部署多个Web应用,步骤是这样的:Copy Tomcat目录-->更改conf/server.xml三个端口号----->部署war包--- ...
- 02 . Tomcat多实例并用Nginx反代
Tomcat虚拟主机 一个应用程序在某一个端口启动运行产生了一系列的进程就是一个实例,让tomcat启动两个不同的相互独立的进程,产生两个不同的套接字,分别运行在不同的端口,让不同的端口响应不同的 ...
- 分享一个批量导出当前实例下的所有linkedserver脚本
分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linked ...
- 搭建Tomcat应用服务器、tomcat虚拟主机及Tomcat多实例部署
一.环境准备 系统版本:CentOS release 6.6 (Final) x86_64 Tomcat版本:tomcat- JDK版本:jdk-8u25-linux-x64 关闭防火墙 软件包下载地 ...
- Tomcat学习总结(10)——Tomcat多实例冗余部署
昨天在跟群友做技术交流的时候,了解到,有很多大公司都是采用了高可用的,分布式的,实例沉余1+台.但是在小公司的同学也很多,他们反映并不是所有公司都有那样的资源来供你调度.往往公司只会给你一台机器,因为 ...
- tomcat集群--单tomcat多实例
1.解压apache-tomcat-7.0.75.tar.gz到任意目录 /data/tomcat-4X 2.建立tomcat多实例目录,这个tomcat-4X运行4X应用的两个实例4002,4004 ...
- Tomcat多实例 - 单机
最近在研究Apache+Tomcat+负载均衡/集群的过程中,发现了一篇好的在单机上部署多个tomcat实例的blog. 感受:关于Apache+Tomcat+负载均衡/集群,国内关于这方面的资料是挺 ...
- Linux init 系列一 System V风格
传统的Linux init有两种风格,System V风格和BSD风格,本文主要介绍System V风格. System V风格init的主要流程是, 1. 内核执行init进程. 2. Init 运 ...
随机推荐
- python3:判断手机的亮屏状态
在用python对手机做一些自动化操作时,常常会判断手机的亮屏状态,知晓手机的亮屏状态后才好做进一步的动作,如给屏幕解锁等. 用于了解手机的亮屏情况,有一个adb命令可用: adb shell du ...
- 自定义token,保存到客户端的cookie中,
自定义token #原理自定义token,放入cookie中,不用存数据库 #token定义方式 >>>>> "加密字符串"|登陆用户id|用户登陆时 ...
- Visual Studio-IIS Express 支持局域网访问配置
转自:http://www.itnose.net/detail/6132793.html 注意:本人测试后,发现个问题,不知是我个人的VS问题还是普遍的.就是将配置文件中的新增的节点注释后,会导致页面 ...
- Linux档案与文件系统的压缩与打包
总结: 压缩指令为透过一些运算方法去将原本的档案进行压缩,以减少档案所占用的磁盘容量.压缩前与压缩后的档案所占用的磁盘容量比值,就可以被称为是“压缩比” 压缩的好处是可以减少磁盘容量的浪费,在www网 ...
- vrpie在Visio Studio 中无法调试的问题
最近这这几天一直在研究vrpie,之前不能调试,一调试就出问题,打开那个生成的htm文件是没问题的,最初的解决方法是不通过调试来打可那个htm页面,但是这样比较麻烦,因为经常需要和服务器交互,就只能用 ...
- R语言中文社区历史文章整理(类型篇)
R语言中文社区历史文章整理(类型篇) R包: R语言交互式绘制杭州市地图:leafletCN包简介 clickpaste包介绍 igraph包快速上手 jiebaR,从入门到喜欢 Catterpl ...
- CentOS6.5创建yum源
昨天给布置个新的需求,做一个Yum仓库,要求是HTTP式的,在某个服务器上搭建个Yum仓库,能让其它的机器有了这个机器的.repo仓库文件后就可以从本地下载安装软件,以前都是下载后直接yum inst ...
- C语言编程题002
给出两个整数,L和R,其中L<=A<=B<=R,然后求出A^B值最大的数.其中1<=L<=R<=1000. 比如说L = 1;R = 3; L 0001 R 001 ...
- ADO之密码验证--3次错误就锁定
这个程序是那vs2010下写的,C#语言.数据库是sql server 2008 首先在数据库中新建一个数据库Test1,在数据库中新建一个表用来保存用户名和密码USERINFO, CREATE TA ...
- android 内存说明
MemoryInfo的Field如下 dalvikPrivateDirty: The private dirty pages used by dalvik. dalvikPss :The propor ...