问题描述:
最近接手了公司一套部署在tomcat上的软件系统,但是经常会出现内存溢出的问题,开发那边找不到原因,每次出问题就得重启服务,相当的麻烦,于是写了几行python代码自己检测服务并重启服务。
基本思路:
思路其实相当的简单,就是每隔一段时间访问一下服务页面,访问超时的话就直接执行tomcat的shutdown脚本和startup脚本。
完整代码:
import urllib.request
import urllib.parse
import json
import time
import os
#访问页面
def url_open(url):
req = urllib.request.Request(url)
page = urllib.request.urlopen(req,timeout=15) #这里一定要设置一个超时时间,比如我遇到的内存溢出的问题不设置超时时间就会一直访问,程序就会卡在这里
html = page.read().decode('utf8')
return html
#重启tomcat服务
def restart(start,shutdown):
print('关闭服务。。。')
os.system(shutdown) #执行shutdown.bat
time.sleep(10) #这里加个延时,因为执行脚本需要时间
print('重启服务。。。')
os.system(start) #执行startup.bat
return False
if __name__ == '__main__' :
url = 'http://127.0.0.1:8080'
#path变量是tomcat的bin目录的路径
path = 'E:\\apache-tomcat-7.0.88-windows-x64\\apache-tomcat-7.0.88\\bin\\'
start = path + 'startup.bat' #linux的话把bat改为sh
shutdown = path + 'shutdown.bat'
a = False
while True:
#判断服务是否挂掉
try:
html = url_open(url)
except:
a = True #服务异常,将True赋值给a变量
else:
a = False #服务正常
#服务挂掉则自动拉起服务
if a:
print('服务异常,尝试自动重启')
a = restart(start,shutdown)
time.sleep(30) #设置每次检测的间隔时间,别设置太小,不然tomcat还没起来就又重启了
注:执行脚本需要配置环境变量CATALINA_HOME(设置为tomcat的目录即可)