之前写过.bat 脚本用来监控tomcat运行宕机后自动重启的文章,接下来提供下python脚本方法,供各位同仁参考,所有方法基于本人实际开发环境,如有瑕疵,还望各位看官批评指正!

## 原理

1.通过socket 连接需要监控的服务器及端口

2.如果无法建立连接,则说明该都端口存在问题,此时调用tomcat重启方法。注意:tomcat 启动也需要一定的时间,这里我们需要做个时间缓冲。

## 具体流程

1.打开python 编辑器,我用的是PyCharm


只在当前脚本运行的 python 脚本运行python文件_只在当前脚本运行的 python


2.随便新建一个python项目


只在当前脚本运行的 python 脚本运行python文件_python_02


3.这里我开始创建python file取名TomcatRestart.py


只在当前脚本运行的 python 脚本运行python文件_只在当前脚本运行的 python_03


直接上代码,具体原理上面已做说明


# -*- coding: utf-8 -*-


import os
import sys
import socket
import time
import datetime
import pip
#到python的pip的路径下,一般是pythonscripts下执行命令(pip install psutil)


#-----服务器上tomcat的信息和服务器的信息---
path = 'path'   #服务器tomcat路径 注意需要双斜杠
ip = 'ip'      #服务器ip地址
port = 8080              #tomcat端口
file_path = 'E:tomcatlog'   #记录每次脚本执行的日志文件文件夹路径


#-------检测8080端口是否能连接,能则tomcat运行中,否则重启tomcat----
def tomcat():
    try:
        b = s.connect((ip,port))
       # os.system("echo %s  connect to port 8080 successfully! >> %s" %(otherStyleTime, logfile))
        status_code = 1
    except Exception:
        status_code = 2
    if status_code == 2:
        os.chdir(path)
        os.system('shutdown.bat')
        os.system("echo %s   can't connect to port 8080, stop tomcat >> %s" %(otherStyleTime,logfile))
        time.sleep(1)
        os.system('startup.bat')
        os.system("echo %s    tomcat restart! >> %s" %(otherStyleTime, logfile))
        time.sleep(60) //注:重启需要一段时间,这里放置60秒等待时间,一般服务器足够重启了
if __name__ == '__main__':
    while True :     #每1秒循环执行一次脚本
        #--------创建ipv4地址簇的tcp连接的socket-------------------
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(1)//设置连接时间,超过1秒无法链接,即默认tomcat 发生异常,执行tomcat()方法
        except socket.error as msg:
            os.system("echo Failed to create socket. Error code: %s , Error message : %s >> %s " %s(str(msg[0]),msg[1],logfile))
        now = int(time.time())
        timeArray = time.localtime(now)
        otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)    #获取固定格式时间的字符串
        logfile = file_path + '%s.log' %(time.strftime('%Y%m%d',time.localtime()))    #日志文件存放处
        tomcat()
        time.sleep(1)


4.可以现在本地测试效果,直接run 这个TomcatRestart.py文件 ,然后发现自动打开了本地tomcat


只在当前脚本运行的 python 脚本运行python文件_服务器_04


关闭tomcat后,程序监控到关闭又会自动打开,还是比较流畅好用的对于一般中小型项目没压力。

## .py文件转换成.exe文件

上面的代码可以达到预期的效果,但是操作起来未免太麻烦,接下来我将TomcatRestart.py文件进行转换生成一个.exe,保证高效可移植。

转换步骤

1.需要安装pywin32

打开setings-------选择


只在当前脚本运行的 python 脚本运行python文件_bat脚本中获取上级目录_05


只在当前脚本运行的 python 脚本运行python文件_tomcat_06


查看自己编辑器是否含有标红处的插件,如没有点击右侧“+”号,搜索pywin32


只在当前脚本运行的 python 脚本运行python文件_只在当前脚本运行的 python_07


选中相应版本然后进行安装


只在当前脚本运行的 python 脚本运行python文件_bat脚本中获取上级目录_08


注:如果安装失败,看下具体什么原因,一般情况是pip需要升级,按照英文提示的本部进行更新,然后再重新安装pywin32就好了。

2.新建一个文件夹例如 pytomcat,将你需要转换的.py文件和exe文件的.ico图片复制到此文件下。(至于如何把图片转换成.ico格式,直接网上一大堆在线工具)


只在当前脚本运行的 python 脚本运行python文件_tomcat_09


接下来打开cmd 命令窗口,通过命令进入文件夹目录下


只在当前脚本运行的 python 脚本运行python文件_tomcat_10


执行命令 pyinstaller -F -i 1.ico TomcatRestart.py


只在当前脚本运行的 python 脚本运行python文件_python_11


很棒!转换完成!

执行完命令后,需要的exe文件就在dist文件夹中


只在当前脚本运行的 python 脚本运行python文件_bat脚本中获取上级目录_12


## 双击启动TomcatRestart.exe 文件 完美运行!