Windows-Python重启tomcat

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_43277055/article/details/83303895

1.介绍

实现环境:Windows7+Python2.7
开发背景:在测试服务器上实现tomcat(apache-tomcat-8.0.29)下包的自动升级;该服务器除tomcat外,无其他服务依赖java;包升级前,需要确认tomcat启动;在包升级后,需要重启tomcat;脚本在测试服务器上,可直接运行的Python代码;
实现原理
终止tomcat进程,如果系统只有一个tomcat在运行,没其他的Java程序在跑的话,终结java进程可快速关掉Tomcat进程;

准备工作
通过以下命令获取到进程列表,而其中java.exe为tomcat已启动标志:

tasklist

当然也可以通过查找tomcat占用的端口(默认8080)进程来查找:

netstat -ano | findstr 8080

Windows下关闭tomcat,可以直接终结java.exe,CMD中可以直接执行以下命令:

taskkill /F /IM java.exe

也可以通过终结进程号(例如:1234)来关闭:

taskkill /F /PID 1234

2.代码实现

    #! /usr/bin/env python
    # coding=utf-8

    import os
    import time
    import subprocess
    import sys
    import re
    import os
    
    reload(sys)
    sys.setdefaultencoding('utf-8')

    if __name__ == '__main__':
        #命令行
        cmd_tasklist = "tasklist"
        cmd_taskkill_java = "taskkill /F /IM java.exe"

    #查找java.exe
    p_srch_java = subprocess.Popen(cmd_tasklist, shell=True, stdout=subprocess.PIPE)
    lines = p_srch_java.stdout.readlines()
    flag_tomcat_status = 0
    for line in lines:
        if re.search("java.exe",line):
            print('已启动tomcat').decode('UTF-8').encode('GBK')
            flag_tomcat_status = 1

    p_srch_java.kill()
    # 如果没有tomcat没有启动,在升级之前,启动tomcat
    if flag_tomcat_status == 0:
        print('升级前tomcat未启动,先启动tomcat').decode('UTF-8').encode('GBK')
        #subprocess.call(cmd_tomcat_startup)
        os.chdir(r"D:\apache-tomcat-8.0.29\bin")
        os.system(".\startup.bat")
        time.sleep(10)


    #升级过程代码省略

    #重启tomcat
    p_srch_tomcat = subprocess.Popen(cmd_tasklist, shell=True, stdout=subprocess.PIPE)
    lines = p_srch_tomcat.stdout.readlines()
    for line in lines:
        if re.search("java.exe",line):
            print('重启tomcat-步骤1停止java.exe').decode('UTF-8').encode('GBK')
            p_taskkill_java = subprocess.Popen(cmd_taskkill_java, shell=True, stdout=subprocess.PIPE)
            p_taskkill_java.wait()
            time.sleep(5)
            print('重启tomcat-步骤2启动tomcat').decode('UTF-8').encode('GBK')
            #subprocess.call(cmd_tomcat_startup)
            os.chdir(r"D:\apache-tomcat-8.0.29\bin")
            os.system(".\startup.bat")
    p_srch_tomcat.kill()

在用Python的subprocess.Popen调用startup.bat命令的过程中,遇到很多问题后,以上为转向使用os.system调用的部分;经过学习后,subprocess.Popen可以如下方式实现:

    pt = subprocess.Popen( "D:\\apache-tomcat-8.0.29\\bin\\startup.bat",stdout=subprocess.PIPE)
        pt.wait()
        for i in range(5):
            print pt.stdout.readline().strip('\n')

3.问题处理

The CATALINA_HOME environment variable is not defined correctly
This environment variable is needed to run this program

第一步鼠标右键计算机->属性->高级系统设置,进去之后,点击环境变量;
第二步开始配置tomcat的环境变量,新建系统变量名CATALINA_BASE,值为tomcat的安装路径;
第三步新建系统变量CATALINA_HOME,值为tomcat的安装路径;
第四步找到系统变量path,在值里面添加“%CATALINA_HOME%\lib;%CATALINA_HOME%\bin”;
第五步点击确定,保存系统变量的配置之后,按win+R键打开运行,输入cmd,点击确定,在命令行中输入“startup”,启动tomcat服务,启动成功代表环境变量配置成功;

猜你喜欢

转载自blog.csdn.net/weixin_43277055/article/details/83303895
今日推荐