Python Tomcat Script(多实例)
之前书写过 Tomcat 单实例的 Python 脚本,本次增加 Tomcat 多实例的操作脚本.
1:准备
安装所需 Python 插件
A方法: pip install argparse
B方法:1.安装依赖包{setuptools}
2.安装 argparse
- #tar xzf setuptools-19.1..tar.gz && cd setuptools-19.1. && python setup.py install
- #tar xzf argparse-1.4..tar.gz && cd argparse-1.4. && python setup.py install
2.脚本内容
- #!/usr/bin/env python
- # _*_coding:utf-8_*_
- # Author "Edward.Liu"
- # Import libary~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- import subprocess
- import time
- import sys
- import signal
- import os
- import argparse
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- class Tomcat(object):
- def __init__(self, tomcat_exe):
- self.tomcat_exe = tomcat_exe
- self.Tomcat_Home = "/install/%s" % tomcat_exe
- self.Tomcat_Log_Home = "/install/%s/logs" % tomcat_exe
- self.counnt = 10
- self.Tomcat_Examples = ['tomcat', 'tomcat-mobile']
- # Get Tomcat_PID~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def get_tomcat_pid(self):
- p = subprocess.Popen(['ps', '-Ao', 'pid,command'], stdout=subprocess.PIPE)
- out, err = p.communicate()
- for line in out.splitlines():
- if 'java' in line:
- if self.tomcat_exe in line:
- pid = int(line.split(None, 1)[0])
- return pid
- # Start Tomcat Process~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def start_tomcat(self):
- if self.get_tomcat_pid() is not None:
- print "\033[32m %s Is Started \033[0m" % self.tomcat_exe
- else:
- # Start Tomcat
- command_start_tomcat = "%s/bin/startup.sh" % self.Tomcat_Home
- p = subprocess.Popen(command_start_tomcat, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, shell=True)
- stdout, stderr = p.communicate()
- print stdout, stderr
- # Stop Tomcat process~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def stop_tomcat(self):
- wait_sleep = 0
- if self.get_tomcat_pid() is None:
- print "\033[32m %s is Not Running\033[0m" % self.tomcat_exe + "~" * 20
- else:
- command_stop_tomcat = "%s/bin/shutdown.sh" % self.Tomcat_Home
- p = subprocess.Popen(command_stop_tomcat, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, shell=True)
- stdout, stderr = p.communicate()
- while (self.get_tomcat_pid() is not None):
- print "waiting for processes to exit\n"
- wait_sleep += 1
- time.sleep(1)
- if wait_sleep == self.counnt:
- os.kill(self.get_tomcat_pid(), signal.SIGKILL)
- print "\033[32m Stop Tomcat is sucessful \033[0m"
- break
- # View TomcatLogs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def tomcat_log(self):
- command_tomcat_log = "tail -f %s/catalina.out " % self.Tomcat_Log_Home
- p = subprocess.Popen(command_tomcat_log, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- returncode = p.poll()
- try:
- while returncode is None:
- line = p.stdout.readline()
- returncode = p.poll()
- line = line.strip()
- print line
- print returncode
- except KeyboardInterrupt:
- print 'ctrl+d or z'
- if __name__ == '__main__':
- parser = argparse.ArgumentParser(
- description="eg: '%(prog)s' -c tomcat|tomcat-mobile -d {start|stop|status|restart|log}")
- # ADD Tomcat Apps ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- parser.add_argument('-c', '--app_name', nargs='+', dest='choices', choices=('tomcat', 'tomcat-mobile'))
- parser.add_argument('-d', '--Handle', action='store', nargs='?', dest='handle',
- help='Input One of the {start|stop|status|restart|log}')
- parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0')
- args = parser.parse_args()
- if len(sys.argv) <= 4:
- parser.print_help()
- else:
- try:
- Handle = Tomcat(args.choices[0])
- if args.handle == 'log':
- Handle.tomcat_log()
- elif args.handle == 'start':
- Handle.start_tomcat()
- elif args.handle == 'stop':
- Handle.stop_tomcat()
- elif args.handle == 'restart':
- Handle.stop_tomcat()
- time.sleep(5)
- Handle.start_tomcat()
- elif args.handle == 'status':
- if Handle.get_tomcat_pid() is not None:
- print "\033[32m %s Is Running is PID:\033[0m" % Handle.tomcat_exe + "\033[31m %s \033[0m" % Handle.get_tomcat_pid()
- else:
- print "\033[32m %s Not Running Or Not Exist \033[0m" % Handle.tomcat_exe
- except TypeError:
- parser.print_help()
Python Tomcat Script(多实例)的更多相关文章
- python基础——类和实例
python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...
- windows下Tomcat配置多实例
详情参见tomcat安装目录下RUNNING.txt中Advanced Configuration - Multiple Tomcat Instances部分. 问题源于下面这段tomcat官方文档的 ...
- 【类不类二】Python的类变量与实例变量
在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云), 搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变 量不是很理 ...
- Python基础-类变量和实例变量
Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...
- python(四)类变量和实例变量
转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...
- 【转】基于Python的接口测试框架实例
下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...
- Python爬虫框架Scrapy实例(三)数据存储到MongoDB
Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...
- tomcat单机多实例部署
最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...
- Python连接MySQL的实例代码
Python连接MySQL的实例代码 MySQLdb下载地址:http://sourceforge.net/projects/mysql-python/ 下载解压缩后放到%Python_HOME% ...
随机推荐
- ASP.NET MVC使用jQuery无刷新上传
昨晚网友有下载了一个jQuery无刷新上传的小功能,他尝试搬至ASP.NET MVC应用程序中去,在上传死活无效果.Insus.NET使用Teamviewer远程桌面,操作一下,果真是有问题.网友是说 ...
- PHP使用SnowFlake算法生成唯一ID
前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的.文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过 ...
- JSONArray.toCollection 封装 bean 失败
1. 问题描述: 通过http请求服务端, 返回的bean的集合的字符串形式, 其中bean中的Date类型的属性值,形式为Long类型的表示形式(1466083519000): String res ...
- [WP8] Binding时,依照DataType选择DataTemplate
[WP8] Binding时,依照DataType选择DataTemplate 范例下载 范例程序代码:点此下载 问题情景 在开发WPF.WP8...这类应用程序的时候,透过Binding机制搭配Da ...
- UIMenuController的使用
1, 基本使用 以对一个UILabel长按弹出菜单为例 子类化UILabel 因为需要覆盖这几个方法:- (BOOL)canBecomeFirstResponder; 返回YES 同时需要在每次UI元 ...
- Smtp邮件发送系统公用代码整理—总结
1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...
- andriod GridView
<?xml version="1.0" encoding="UTF-8"?> <GridView xmlns:android="ht ...
- [ javascript html Dom image 对象事件加载方式 ] 对象事件加载方式
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- 如何通过PowerShell在Visual Studio的Post-build中预热SharePoint站点
问题现象 Visual Studio在开发SharePoint的时候,发布部署包后,首次打开及调试站点页面的时候会非常的慢 解决方案 使用PowerShell脚本,加载SharePoint插件后遍历所 ...
- UISegmentedControl的使用
#import "SegmentedControlTestViewController.h" @implementation SegmentedControlTestViewCon ...