解决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知识等,看了 ...
随机推荐
- 【套题】qbxt国庆刷题班D1
Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...
- 爬虫实例——通过JS控制滚动条
案例 某位淘女郎的某个相册 有能力的童鞋可以先尝试一下爬取每张照片的链接. 我曾经尝试过几种方法,下面一一介绍: 第一种方法,采用requests和BeautifulSoup: import requ ...
- C++之内部类与外部类(嵌套类)及友元
转载于:http://www.cnblogs.com/qzhforthelife/p/3226885.html 先上代码: class Outer { public: Outer(){m_outerI ...
- 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)
洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...
- bzoj1177 [Apio2009]Oil 二维前缀最大值,和
[Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 2300 Solved: 932[Submit][Status][Disc ...
- ubuntu18.04server设置静态IP
16.04以后的版本配置静态IP是类似这样的文件 /etc/netplan/50-cloud-init.yaml 1.查询网卡名称 2.修改配置文件/etc/netplan/50-cloud-init ...
- 跨域共享cookie和跨域共享session
转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...
- 让ie8、ie9支持媒体查询
<!-- 让IE8/9支持媒体查询,从而兼容栅格 --> <!--[if lt IE 9]> <script src="https://cdn.staticfi ...
- 51Nod 1010 只包含因子2 3 5的数 | 预处理+二分
Input示例 5 1 8 13 35 77 Output示例 2 8 15 36 80 分析:将所有的只含有2 3 5因子的数打一个表保存在一个数组里,然后二分查找第一个>=数组里的数,输出 ...
- SPOJ AMR11E Distinct Primes 基础数论
Arithmancy is Draco Malfoy's favorite subject, but what spoils it for him is that Hermione Granger i ...