解决Tomcat因Redis加载慢而启动失败的问题
StartTomcat.py
import subprocess as t
import time, os, requests, sys WEB_IP = '127.0.0.1:8080'
# WEB_IP = '127.0.0.1'
REDIS_IP = '127.0.0.1'
REDIS_PORT = '' # 获取当前时间
def getCurrentTime():
return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) # 检查 Tomcat
def check_Tomcat():
var = t.getoutput("ps -ef | grep tomcat")
success = False
for line in var.split("\n"):
if '/usr/local/tomcat7/conf/logging.properties' in line:
success = True if not success:
return False # 判断是不是 Tomcat僵死掉
try:
requests.get("http://" + WEB_IP + "/dsideal_yy/adminlogin/captchaText", timeout=1)
except requests.exceptions.ConnectTimeout:
return False
except requests.exceptions.Timeout:
return False # 判断验证码是不是能正常生成?
r = requests.get("http://" + WEB_IP + "/dsideal_yy/adminlogin/captchaText")
if r.status_code != 200:
return False
else:
# 下载图片
try:
r = requests.get("http://" + WEB_IP + "/dsideal_yy/adminlogin/captchaImage?text=" + r.json()['text'])
with open('/usr/local/software/picture.jpg', 'wb') as file:
file.write(r.content)
# 用完就删除了吧
os.remove('/usr/local/software/picture.jpg')
return True
except Exception as err:
print('Tomcat检查发现异常:' + str(err))
return False # 重新启动Tomcat
def RestartTomcat(): # 准备了十秒的缓冲时间,用来将mysql和ssdb进行启动应该足够了
# 开始关闭Tomcat
cmd = '/usr/local/tomcat7/bin/shutdown.sh'
os.system(cmd)
print('正在关闭Tomcat...')
# 休息5秒
cmd = "sleep 5"
os.system(cmd) # 查找Tomcat进程并杀死进程
cmd = "ps -ef | grep 'tomcat' | grep -v grep| awk '{print $2}' | xargs kill -9"
os.system(cmd)
print('正在杀掉Tomcat...')
# 休息5秒
cmd = "sleep 5"
os.system(cmd) # 重新启动Tomcat
cmd = '/usr/local/tomcat7/bin/startup.sh'
os.system(cmd) while True:
r = check_Tomcat()
if r:
print('恭喜!Tomcat启动成功!')
break
else:
time.sleep(1)
print('Tomcat还在启动中,请稍等...' + getCurrentTime()) if __name__ == "__main__": # 创建工作目录
path = '/usr/local/software/CloudPlatformUtil/AutoDeployment/'
if not os.path.exists(path):
cmd = 'mkdir -p ' + path
os.system(cmd) # 正常的工作目录
if os.path.abspath('.') != path:
print('系统检查到不是在规定的目录下执行,正在拷贝到正确目录下!')
print(sys.argv[0])
cmd = 'rm -rf ' + path + (sys.argv[0]).split('/')[-1]
print(cmd)
os.system(cmd)
cmd='cp '+os.path.abspath('.')+'/'+sys.argv[0]+' '+path+sys.argv[0]
print(cmd)
os.system(cmd) # 执行测试命令
cmd = 'redis-cli -h ' + REDIS_IP + ' -p ' + REDIS_PORT + ' set a 1' while True:
result = t.getoutput(cmd)
if 'Connection refused' in result:
print('redis连接被拒绝,服务没有开启!正在开启...' + getCurrentTime())
cmd2 = 'service redis start'
os.system(cmd2)
time.sleep(1)
elif 'LOADING Redis is loading the dataset in memory' in result:
print('redis正在加载中...' + getCurrentTime())
time.sleep(1)
else:
print('redis正常!' + getCurrentTime())
break # 重新启动Tomcat
RestartTomcat() # 替换 /usr/local/tomcat7/bin/startup.sh
# 检查cron中是否存在本程序的进程
# 将文件读取到内存中
foundDownload = False
with open('/etc/rc.local', "r", encoding="utf-8") as f:
lines = f.readlines() # 删除某行
with open("/etc/rc.local", "w", encoding="utf-8") as f_w:
for line in lines:
if "/usr/local/tomcat7/bin/startup.sh" in line:
continue
if "python3 /usr/local/software/CloudPlatformUtil/AutoDeployment/StartTomcat.py" in line:
continue
f_w.write(line) # 增加某行
with open('/etc/rc.local', 'a') as f:
f.write('python3 /usr/local/software/CloudPlatformUtil/AutoDeployment/StartTomcat.py' + '\n') print('恭喜,所有动作成功完成!')
解决Tomcat因Redis加载慢而启动失败的问题的更多相关文章
- hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败
在使用spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") @Resp ...
- Fullcalendar改版后发布到IIS或者tomcat里面前端加载数据不显示的问题
问题如题:Fullcalendar改版后发布到IIS或者tomcat里面前端加载数据不显示的问题 解决办法:通过火狐浏览器工具发现是时间格式不对的原因,需要将时间格式修改为:yyyy-MM--DD ...
- iOS 解决LaunchScreen中图片加载黑屏问题
iOS 解决LaunchScreen中图片加载黑屏问题 原文: http://blog.csdn.net/chengkaizone/article/details/50478045 iOS 解决Lau ...
- Tomcat的class加载的优先顺序
Tomcat的class加载的优先顺序一览 1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件. 2.环境变量CLASSPATH中的jar和class文件. 3.$CATALINA ...
- 解决 Visual Studio 符号加载不完全问题
解决 Visual Studio 符号加载不完全问题 工具 - 选项 - 搜索 "符号" - 选上服务器 | 加载所有符号, 之后符号就会显示完全
- 解决页面初始化vue加载代码问题
<style type="text/css"> /* 解决页面初始化vue加载代码问题 */ [v-cloak] { display: none; } </sty ...
- Hive中将文件加载到数据库表失败解决办法
Hive中将文件加载到数据库表失败解决办法(hive创建表失败) 遇到的问题: FAILED: Execution Error, return code 1 from org.apache.hadoo ...
- Tomcat 7 自动加载类及检测文件变动原理
在一般的 web 应用开发里通常会使用开发工具(如 Eclipse.IntelJ )集成 tomcat ,这样可以将 web 工程项目直接发布到 tomcat 中,然后一键启动.经常遇到的一种情况是直 ...
- Tomcat是如何加载Spring和SpringMVC及Servlet相关知识
概述 大家是否清楚,Tomcat是如何加载Spring和SpringMVC,今天我们就弄清下这个过程(记录最关键的东西) 其中会涉及到大大小小的知识,包括加载时候的设计模式,Servlet知识等,看了 ...
随机推荐
- codeforces的dp专题
1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...
- C/C++中二维数组和指针关系分析
在C/c++中,数组和指针有着密切的关系,有很多地方说数组就是指针式错误的一种说法.这两者是不同的数据结构.其实,在C/c++中没有所谓的二维数组,书面表达就是数组的数组.我猜想是为了表述方便才叫它二 ...
- [rsync]rsync设定及错误处理
server端设置 修改/etc/default/rsync RSYNC_ENABLE=true RSYNC_OPTS='--address=10.192.0.5' RSYNC_NICE=' ...
- 001 Python中的变量和字符串
1.Python“变量”更像“名字” 变量名就像我们现实社会的名字,把一个值赋值给一个名字时,Ta会存储在内存中,称之为变量(variable). 在大多数语言中,都把这种行为称为“给变量赋值”或“把 ...
- JAVA、android中常用的一些jar包的作用
正文: 这里主要介绍的是hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进 ...
- 35 个你也许不知道的 Google 开源项目
转载自:http://blog.csdn.net/cnbird2008/article/details/18953113 Google是支持开源运动的最大公司之一,它们现在总共发布有超过500个的开源 ...
- 关于$.data(element,key,value)与ele.data.(key,value)的区别
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 洛谷 3029 [USACO11NOV]牛的阵容Cow Lineup
https://www.luogu.org/problem/show?pid=3029 题目描述 Farmer John has hired a professional photographer t ...
- outer的使用
outer就是一个标签,java语言中根本没有此关键字,因此outer也可以用其它的词来代替 java中的标签就是一个紧跟着英文冒号(:)的标识符.与其他语言不同的是,java中的标签只有放在循环语言 ...
- ssh连接提示 "Connection closed by remote host"
如果原来是可以用ssh连接的, 突然连接不上通常是连接数过多导致的. 解决方法一. 把SSH连接数改大 修改服务器上的这个文件:/etc/ssh/sshd_config 找到这行: # MaxSess ...