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

1:准备

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

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

       2.安装 argparse

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

       

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

  1. python基础——类和实例

    python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...

  2. windows下Tomcat配置多实例

    详情参见tomcat安装目录下RUNNING.txt中Advanced Configuration - Multiple Tomcat Instances部分. 问题源于下面这段tomcat官方文档的 ...

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

    在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云), 搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变 量不是很理 ...

  4. Python基础-类变量和实例变量

    Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...

  5. python(四)类变量和实例变量

    转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...

  6. 【转】基于Python的接口测试框架实例

    下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...

  7. Python爬虫框架Scrapy实例(三)数据存储到MongoDB

    Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...

  8. tomcat单机多实例部署

    最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...

  9. Python连接MySQL的实例代码

    Python连接MySQL的实例代码   MySQLdb下载地址:http://sourceforge.net/projects/mysql-python/ 下载解压缩后放到%Python_HOME% ...

随机推荐

  1. ASP.NET MVC使用jQuery无刷新上传

    昨晚网友有下载了一个jQuery无刷新上传的小功能,他尝试搬至ASP.NET MVC应用程序中去,在上传死活无效果.Insus.NET使用Teamviewer远程桌面,操作一下,果真是有问题.网友是说 ...

  2. PHP使用SnowFlake算法生成唯一ID

    前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的.文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过 ...

  3. JSONArray.toCollection 封装 bean 失败

    1. 问题描述: 通过http请求服务端, 返回的bean的集合的字符串形式, 其中bean中的Date类型的属性值,形式为Long类型的表示形式(1466083519000): String res ...

  4. [WP8] Binding时,依照DataType选择DataTemplate

    [WP8] Binding时,依照DataType选择DataTemplate 范例下载 范例程序代码:点此下载 问题情景 在开发WPF.WP8...这类应用程序的时候,透过Binding机制搭配Da ...

  5. UIMenuController的使用

    1, 基本使用 以对一个UILabel长按弹出菜单为例 子类化UILabel 因为需要覆盖这几个方法:- (BOOL)canBecomeFirstResponder; 返回YES 同时需要在每次UI元 ...

  6. Smtp邮件发送系统公用代码整理—总结

    1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...

  7. andriod GridView

    <?xml version="1.0" encoding="UTF-8"?> <GridView xmlns:android="ht ...

  8. [ javascript html Dom image 对象事件加载方式 ] 对象事件加载方式

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  9. 如何通过PowerShell在Visual Studio的Post-build中预热SharePoint站点

    问题现象 Visual Studio在开发SharePoint的时候,发布部署包后,首次打开及调试站点页面的时候会非常的慢 解决方案 使用PowerShell脚本,加载SharePoint插件后遍历所 ...

  10. UISegmentedControl的使用

    #import "SegmentedControlTestViewController.h" @implementation SegmentedControlTestViewCon ...