Python Tomcat Script(多实例)

之前书写过 Tomcat 单实例的 Python 脚本,本次增加 Tomcat 多实例的操作脚本.

1:准备

  安装所需 Python 插件
    A方法: pip install argparse

    B方法:1.安装依赖包{setuptools}

       2.安装 argparse

#tar xzf setuptools-19.1.1.tar.gz && cd setuptools-19.1.1 && python setup.py install
#tar xzf argparse-1.4.0.tar.gz && cd argparse-1.4.0 && python setup.py install

2.脚本内容

  1 #!/usr/bin/env python
  2 # _*_coding:utf-8_*_
  3 # Author "Edward.Liu"
  4
  5 # Import libary~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6 import subprocess
  7 import time
  8 import sys
  9 import signal
 10 import os
 11 import argparse
 12
 13
 14 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 15 class Tomcat(object):
 16     def __init__(self, tomcat_exe):
 17         self.tomcat_exe = tomcat_exe
 18         self.Tomcat_Home = "/install/%s" % tomcat_exe
 19         self.Tomcat_Log_Home = "/install/%s/logs" % tomcat_exe
 20         self.counnt = 10
 21         self.Tomcat_Examples = [‘tomcat‘, ‘tomcat-mobile‘]
 22
 23     # Get Tomcat_PID~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 24     def get_tomcat_pid(self):
 25         p = subprocess.Popen([‘ps‘, ‘-Ao‘, ‘pid,command‘], stdout=subprocess.PIPE)
 26         out, err = p.communicate()
 27         for line in out.splitlines():
 28             if ‘java‘ in line:
 29                 if self.tomcat_exe in line:
 30                     pid = int(line.split(None, 1)[0])
 31                     return pid
 32
 33     # Start Tomcat Process~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 34     def start_tomcat(self):
 35         if self.get_tomcat_pid() is not None:
 36             print "\033[32m %s Is Started \033[0m" % self.tomcat_exe
 37         else:
 38             # Start Tomcat
 39             command_start_tomcat = "%s/bin/startup.sh" % self.Tomcat_Home
 40             p = subprocess.Popen(command_start_tomcat, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
 41                                  stderr=subprocess.PIPE, shell=True)
 42             stdout, stderr = p.communicate()
 43             print stdout, stderr
 44
 45     # Stop Tomcat process~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 46     def stop_tomcat(self):
 47         wait_sleep = 0
 48         if self.get_tomcat_pid() is None:
 49             print "\033[32m %s is Not Running\033[0m" % self.tomcat_exe + "~" * 20
 50         else:
 51             command_stop_tomcat = "%s/bin/shutdown.sh" % self.Tomcat_Home
 52             p = subprocess.Popen(command_stop_tomcat, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
 53                                  stderr=subprocess.PIPE, shell=True)
 54             stdout, stderr = p.communicate()
 55             while (self.get_tomcat_pid() is not None):
 56                 print "waiting for processes to exit\n"
 57                 wait_sleep += 1
 58                 time.sleep(1)
 59                 if wait_sleep == self.counnt:
 60                     os.kill(self.get_tomcat_pid(), signal.SIGKILL)
 61                     print "\033[32m Stop Tomcat is sucessful \033[0m"
 62                     break
 63
 64     # View TomcatLogs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 65     def tomcat_log(self):
 66         command_tomcat_log = "tail -f %s/catalina.out " % self.Tomcat_Log_Home
 67         p = subprocess.Popen(command_tomcat_log, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
 68         returncode = p.poll()
 69         try:
 70             while returncode is None:
 71                 line = p.stdout.readline()
 72                 returncode = p.poll()
 73                 line = line.strip()
 74                 print line
 75             print returncode
 76         except KeyboardInterrupt:
 77             print ‘ctrl+d or z‘
 78
 79
 80 if __name__ == ‘__main__‘:
 81     parser = argparse.ArgumentParser(
 82             description="eg: ‘%(prog)s‘ -c tomcat|tomcat-mobile -d {start|stop|status|restart|log}")
 83     # ADD Tomcat Apps ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 84     parser.add_argument(‘-c‘, ‘--app_name‘, nargs=‘+‘, dest=‘choices‘, choices=(‘tomcat‘, ‘tomcat-mobile‘))
 85     parser.add_argument(‘-d‘, ‘--Handle‘, action=‘store‘, nargs=‘?‘, dest=‘handle‘,
 86                         help=‘Input One of the {start|stop|status|restart|log}‘)
 87     parser.add_argument(‘-v‘, ‘--version‘, action=‘version‘, version=‘%(prog)s 1.0‘)
 88     args = parser.parse_args()
 89     if len(sys.argv) <= 4:
 90         parser.print_help()
 91     else:
 92         try:
 93             Handle = Tomcat(args.choices[0])
 94             if args.handle == ‘log‘:
 95                 Handle.tomcat_log()
 96             elif args.handle == ‘start‘:
 97                 Handle.start_tomcat()
 98             elif args.handle == ‘stop‘:
 99                 Handle.stop_tomcat()
100             elif args.handle == ‘restart‘:
101                 Handle.stop_tomcat()
102                 time.sleep(5)
103                 Handle.start_tomcat()
104             elif args.handle == ‘status‘:
105                 if Handle.get_tomcat_pid() is not None:
106                     print "\033[32m %s Is Running is PID:\033[0m" % Handle.tomcat_exe + "\033[31m %s \033[0m" % Handle.get_tomcat_pid()
107                 else:
108                     print "\033[32m %s Not Running Or Not Exist \033[0m" % Handle.tomcat_exe
109
110         except TypeError:
111             parser.print_help()

       

时间: 2024-08-06 03:44:03

Python Tomcat Script(多实例)的相关文章

Tomcat单机多实例部署-多项目部署

博文说明[前言]: 本文将通过个人口吻介绍Tomcat单机多实例部署,在目前时间点[2017年8月13号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 本文参考文献及引用文章链接: 1.http://wiki.jikexueyuan.com/project/tomcat/ [Tomcat 8 权威指南-极客学院出品] 2.<Tomcat 权威指南> 2.http://www.cn

Docker 快速验证 tomcat 单机多实例方案

概述 主要讲的是解决问题的思路.当然也附带了尽可能详细的步骤,感兴趣的童鞋可以一步一步跟着来实践一把.因为运维职业的缘故,基本上是把事故当故事来写了,希望能够喜欢. 缘起 至少10年了,没在一线玩过 Tomcat 了,这次客户现场就来了一场遭遇战.虽然客户说了他来搭建,但是项目进度不等人,还是自己动手吧.当然了,新服务器是要走流程申请的,只能在现有服务器想办法.犹记得当年解决 Tomcat 部署这些都是小菜,没想到在苛刻的商业环境中,处处是坑,步步有雷.不过,咱干过开发也干过运维,这点儿动手的事

Python无限元素列表实例教程

有关Python中无限元素列表的实现方法. 本文实例讲述了Python怎么实现无限元素列表的方法,具体实现可使用Yield来完成.下面所述的2段实例代码通过Python Yield 生成器实现了简单的无限元素列表.(www.jbxue.com)1.递增无限列表具体代码:def increment(): i = 0 while True: yield i i += 1 for j in increment(): print i if (j > 10) : break 2.斐波那契无限列表具体代码:

python搭建简易服务器实例参考

有关python搭建简易服务器的方法. 需求分析: 省油宝用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪, 每次打开都要缓上半天,甚至浏览器直接挂掉 采用python搭建一个最最简易的 web 服务 请求一个nick 就返回 对应的 报表数据 参数用GET方式传送 调研与实现: 园里没找到靠谱的,google了半天,最终还是成功了. 以下是源码,里面记录了 其中的 一些问题 复制代码 代码如下: #! /usr/bin/env python # -*- coding: utf-8 -

Python连接MySQL的实例代码

Python连接MySQL的实例代码 MySQLdb下载地址:http://sourceforge.net/projects/mysql-python/ 下载解压缩后放到%Python_HOME%/Lib/site-packages目录中,python会自动找到此包. MySQLdb基本上是MySQL C API的Python版,遵循Python Database API Specification v2.0. 其他: 1. 平台及版本 linux 内核2.6,gcc 3.4.4,glibc 2

[转载]Tomcat单机多实例配置

Tomcat单机多实例配置 当一个进程的线程超过500个的话,那么这个进程的运行效率会变得很低.因为一个进程产生过多的线程,CPU资源会浪费在线程间切换过程当中.但当服务器配置很高的情况下,如:32G内存,16核的CPU.这样一台高配的机器上只装一个Tomcat实例,会有点浪费.其实我们可以根据服务器的硬件配置,配置多个Tomcat实例,充分利用硬件的资源.你第一时间可能会想到,直接下载多份Tomcat安装包,直接解压,改下端口跑起来不就可以了? 这样也是可以的,但不好维护.假设你在一台机器上安

【类不类二】Python的类变量与实例变量

在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云), 搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变 量不是很理解,就拿来与诸君共享! C博客的大伽: http://blog.csdn.net/xxkkff/article/details/4396895 上一篇[类不类2]: http://www.cnblogs.com/Ruby517/p/5709558.html 一般的类定义是写成这种形式 class <

基于Python的接口测试框架实例

文章来源:http://www.jb51.net/article/96481.htm 下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 背景 最近公司在做消息推送,那么自然就会产生很多接口,测试的过程中需要调用接口,我就突然觉得是不是可以自己写一个测试框架? 说干就干,由于现有的接口测试工具Jmeter.SoupUI等学习周期有点长,干脆自己写一个吧,不求人,所有功能自己都能一清二楚. 当然,写工具造轮子只是

单Tomcat的多实例配置原理及应用

转自 http://www.cher7.com/?id=12919 我们常有在JAVAWeb应用部署或依赖Tomcat应用中遇到单机多实例的需求,解决方案一般有: 1.复制Tomcat到不同目录,更改Server.xml等配置文件: 2.部署不同应用实例到webapps目录下或直接将多项目部署到同一Tomcat实例中. 以此解决多项目部署问题,不能说以上两种解决方案不对,只是这种解决思路有以下几个问题: 复制多Tomcat难于维护.两三个实例还好说,如果配置十个以上的实例,那对于统一启动.Tom