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加载慢而启动失败的问题的更多相关文章

  1. hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败

    在使用spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") @Resp ...

  2. Fullcalendar改版后发布到IIS或者tomcat里面前端加载数据不显示的问题

    问题如题:Fullcalendar改版后发布到IIS或者tomcat里面前端加载数据不显示的问题 解决办法:通过火狐浏览器工具发现是时间格式不对的原因,需要将时间格式修改为:yyyy-MM--DD   ...

  3. iOS 解决LaunchScreen中图片加载黑屏问题

    iOS 解决LaunchScreen中图片加载黑屏问题 原文: http://blog.csdn.net/chengkaizone/article/details/50478045 iOS 解决Lau ...

  4. Tomcat的class加载的优先顺序

    Tomcat的class加载的优先顺序一览 1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件. 2.环境变量CLASSPATH中的jar和class文件. 3.$CATALINA ...

  5. 解决 Visual Studio 符号加载不完全问题

    解决 Visual Studio 符号加载不完全问题 工具 - 选项 - 搜索 "符号" - 选上服务器 | 加载所有符号, 之后符号就会显示完全

  6. 解决页面初始化vue加载代码问题

    <style type="text/css"> /* 解决页面初始化vue加载代码问题 */ [v-cloak] { display: none; } </sty ...

  7. Hive中将文件加载到数据库表失败解决办法

    Hive中将文件加载到数据库表失败解决办法(hive创建表失败) 遇到的问题: FAILED: Execution Error, return code 1 from org.apache.hadoo ...

  8. Tomcat 7 自动加载类及检测文件变动原理

    在一般的 web 应用开发里通常会使用开发工具(如 Eclipse.IntelJ )集成 tomcat ,这样可以将 web 工程项目直接发布到 tomcat 中,然后一键启动.经常遇到的一种情况是直 ...

  9. Tomcat是如何加载Spring和SpringMVC及Servlet相关知识

    概述 大家是否清楚,Tomcat是如何加载Spring和SpringMVC,今天我们就弄清下这个过程(记录最关键的东西) 其中会涉及到大大小小的知识,包括加载时候的设计模式,Servlet知识等,看了 ...

随机推荐

  1. Navicat新建查询快捷键

    在Navicat中,我们选中一个表,双击打开,这是如果要新建查询这个表的sql语句,可以直接用快捷键  ctrl+q 会自动打开查询窗口,并直接写好 sql:select * from (当前打开的表 ...

  2. sublime Text 块编辑方法

    比如我们要把SQL语句中的多表查询结果封装成pojo SQL: SELECT a.id, a.title, a.sell_point, a.price, a.image, b.`name` categ ...

  3. 背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战

    背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...

  4. Codeforces Round #398 (Div. 2) A B C D 模拟 细节 dfs 贪心

    A. Snacktower time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  5. HDU4685:Prince and Princess(二分图匹配+tarjan)

    Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  6. You can't specify target table 'table' for update in FROM clause

    delete from table1 where ID not in(select max(ID) ID from table1 group by row1) and row1 ) # 出现错误 # ...

  7. UVA 1649 Binomial coefficients

    https://vjudge.net/problem/UVA-1649 题意: 输入m,求所有的C(n,k)=m m<=1e15 如果枚举n,那么C(n,k)先递增后递减 如果枚举k,那么C(n ...

  8. 组合数学--约瑟夫环问题 Josephus

    约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环. 有n个囚犯站成一个圆圈,准备处决.首先从一个人开始,越过k-2个人(因为第 ...

  9. 数学:BSGS

    先来稍微回顾一下,我们已经会求模线性方程(包括其特殊情况乘法逆元) 我们还会进行幂取模的快速算法(模是质数用费马小定理,模一般情况用欧拉定理) 对于幂中指数特别大的情况,我们还延伸出了拓展欧拉定理来解 ...

  10. HDU - 5327 Olympiad(一维前缀和)

    Olympiad Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem ...