zoukankan      html  css  js  c++  java
  • tomcat 多实例的Sys V风格脚本

    -------------------------------------------------[翠花,上脚本]-------------------------------------------------------------------------------
      1 #!/bin/sh
      2 #
      3 # function: Tomcat mutil instance init script for Linux.
      4 # author: 
      5 #          QQ:765482322 
      6 #          mail: login_532_gajun@sina.com
      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      print_log             Print tomcat instance run log        
     42 EOF
     43 }
     44 
     45 # 根据给定的参数判断用户对tomcat实例所要执行的动作
     46 action(){
     47 run_action=("start" "stop" "restart" "configtest" "status" "print_log")
     48 local i=1
     49 while [ $i -le 2 ];do
     50         for j in ${run_action[*]};do
     51             if [ ${arg[$i-1]} == $j ];then
     52                 hit_action=$j;break
     53             else
     54                 continue
     55             fi
     56         done
     57         if [ -n "$hit_action" ];then
     58         #echo "hit_action=$hit_action"
     59             break
     60         else
     61             let i++
     62         fi
     63 done
     64 if [ -z "$hit_action" ];then
     65     help_info
     66     exit 1
     67 fi
     68 
     69 }
     70 
     71 # 通过选项--instance 得到tomcat实例所在路径
     72 option() {
     73     local i=1
     74     while [ $i -le 2 ];do
     75         if echo ${arg[$i-1]} | egrep -i "(^--instance=)" &> /dev/null;then
     76             instance_name=$(echo ${arg[$i-1]} | sed -r 's/--instance=(.*)/1/')
     77             break
     78         else
     79             let i++
     80         fi
     81     done
     82     if [ -z "$instance_name" ];then
     83         help_info        
     84         exit 1
     85     fi
     86 }
     87 
     88 # 启动tomcat实例
     89 start(){
     90     $CATALINA_HOME/bin/startup.sh &> /dev/null
     91     sleep 2
     92     if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then
     93         echo -e "Starting tomcat instance $instance_name:                    33[32m[  OK  ]33[0m"
     94     #   echo $tomcat_getpid | bash > $pidfile
     95     else
     96         echo -e "Starting tomcat instance $instance_name:                    33[31m[FAILED]33[0m"
     97     exit 1
     98     fi
     99 }
    100 
    101 # 停止tomcat实例,注意有时使用catalina.sh 执行 stop不成功,所以加了层判断,如果使用catalina.sh 关闭不了进程,就使用kill杀死进程
    102 stop(){
    103     $CATALINA_HOME/bin/shutdown.sh &> /dev/null 
    104     sleep 2
    105     if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null;then
    106         ps -ef | grep "java" | grep -w "$CATALINA_HOME" | awk '{print $2}' | xargs kill -9 &> /dev/null 
    107             if [ $? -eq 0 ];then
    108                 echo -e "Stopping tomcat instance $instance_name:                    33[32m[  OK  ]33[0m"
    109             else
    110                 echo -e "Stopping tomcat instance $instance_name:                    33[31m[FAILED]33[0m"
    111                 exit 2
    112             fi
    113     else
    114         echo -e "Stopping tomcat instance $instance_name:                    33[32m[  OK  ]33[0m"
    115     fi
    116 }
    117 
    118 # 重启tomcat实例
    119 restart(){
    120     $CATALINA_HOME/bin/configtest.sh &> /dev/null
    121     if [ $? -eq 0 ];then
    122         if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then
    123             stop
    124         else
    125             echo -e "Stopping tomcat instance $instance_name:                    33[31m[FAILED]33[0m"
    126         fi 
    127          
    128         start
    129     else
    130         exit 2
    131     fi
    132 }
    133 
    134 # 查看tomcat实例状态
    135 status(){
    136     if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null;then
    137         ps -ef | grep "java" | grep -w "$CATALINA_HOME" | awk '{print $2}' | while read java_pid;do
    138             echo -e "33[32mOK: tomcat instance $instance_name is running ($java_pid)33[0m"
    139         done
    140         return 0
    141     else
    142         echo -e "33[31mWarning: tomcat instance $instance_name is not running33[0m"
    143         return 2
    144     fi
    145 }
    146         
    147 # tomcat实例配置文件测试
    148 configtest(){
    149    $CATALINA_HOME/bin/configtest.sh
    150 }
    151 
    152 # 打印tomcat启动日志
    153 print_log(){
    154     local exit_code
    155     whiptail --title "Print Yes/No Log" --yesno "Choose between Yes and No." 10 60
    156     exit_code=`echo $?`
    157     if [ $exit_code -eq 0 ];then
    158         echo -e "33[32m====================[$instance_name Log]=======================================33[0m"
    159         tailf $CATALINA_HOME/logs/catalina.out 
    160     else
    161         return 1
    162     fi
    163 }
    164 # main 165 # 根据函数syntax确定tomcat实例的家目录 166 arg_count=$# 167 arg=("$1" "$2") 168 syntax_check 169 #export CATALINA_HOME=/usr/local/tomcat/instance/$instance_name 170 export CATALINA_HOME=/opt/tomc_instance/$instance_name 171 172 # 173 case $hit_action in 174 start) 175 if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then 176 echo -e "33[32mNotice: Service tomcat instance $instance_name is running ...33[0m" 177 exit 1 178 else 179 start 180 sleep 0.3 181 print_log 182 fi 183 ;; 184 185 stop) 186 if ps -ef | grep "java" | grep -w "$CATALINA_HOME" &> /dev/null ;then 187 stop 188 sleep 0.3 189 print_log 190 else 191 echo -e "33[31mWarning: Service tomcat instance $instance_name is stopped33[0m" 192 fi 193 ;; 194 195 restart) 196 restart 197 sleep 0.3 198 print_log 199 ;; 200 201 status) 202 status 203 ;; 204 205 configtest) 206 configtest 207 ;; 208 209 print_log) 210 print_log 211 ;; 212 213 *) 214 help_info 215 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                                                                        

      4. 启动并打印日志

     

    总结:

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

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

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

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

  • 相关阅读:
    PHP 语法
    PHP 安装
    06_传智播客iOS视频教程_方法的本质是SEL消息
    05_传智播客iOS视频教程_类对象的使用
    04_传智播客iOS视频教程_类是以Class对象存储在代码段
    03_传智播客iOS视频教程_作业讲解及结构体与类的区别
    02_传智播客iOS视频教程_子类在内存中的存储和方法调用过程
    01_传智播客iOS视频教程_课程介绍与知识点回顾
    Day01-Objective-C语法基础-video 01_传智播客iOS视频教程_OC的简要历史
    17_关于上下文的说明
  • 原文地址:https://www.cnblogs.com/M18-BlankBox/p/5881508.html
Copyright © 2011-2022 走看看