tomcat 部署脚本
将一下3个脚本放到一个目录里,做成一个 python 的包即可使用
脚本介绍
操作服务脚本
#!/usr/bin/env python # _*_coding:utf-8_*_ # Author: "Edward.Liu" # Author-Email: lonnyliu@126.compile"""process hanlde files incloud1.process statususe request get Url returncode2.process Stopuse psutil kill process3.process startuse subprocess run shell start process4.process loguse process logs5.process restart """# Improt Libary import psutil from subprocess import PIPE, Popen, STDOUT import os import sys import requests import datetime# Set vars process_name = "/software/apache-tomcat-jenkins" url = "http://172.31.1.230:8080"def process_id():# use process name get process pidprocess_base_str = "-Dcatalina.base=%s" % process_namepid = {}for proc in psutil.process_iter():try:pinfo = proc.as_dict(attrs=['pid', 'name', 'cmdline'])except psutil.NoSuchProcess:passelse:if process_base_str in pinfo.get('cmdline'):pid[process_name] = pinfo.get('pid')return piddef process_judgment():# 判断 URL 的状态码messages = ""try:jenkins_r = requests.get(url, timeout=None)return jenkins_r.status_codeexcept requests.ConnectTimeout:messges = "Timeout"return messgesexcept requests.ConnectionError:messages = "connection"return messagesexcept requests.HTTPError:messages = "httperror"return messageselse:return messagesdef process_status():# judgment process statusif not process_id().get(process_name) is None:if process_judgment() == 200:print "\033[32mProcess %s normal\033[0m" \% process_name.split('/')[2]else:print "\033[31mProcess Dont Access By:%s\033[0m" % url + "\n"\"\033[31mMesages:%s" % process_judgment()else:print "\033[31mProcess %s does not exist" % process_name.split('/')[2]def process_log_info():process_log = "tail -f %s/logs/catalina.out " % process_nameprocess_logs = Popen(process_log, shell=True,stdout=PIPE, stderr=STDOUT)returncode = process_logs.poll()try:while returncode is None:line = process_logs.stdout.readline()returncode = process_logs.poll()line = line.strip()print lineprint returncodeexcept KeyboardInterrupt:print 'ctrl+d or z'def process_kill():# judgment process existif process_id().get(process_name) is None:print "\033[31mProcess %s is Not Started" % process_name.split('/')[2]sys.exit(0)elif not process_id().get(process_name) is None \and process_judgment() != 200:print "\033[31mProcess %s is Started But Process access Failed \Messages:" % (process_name, process_judgment())sys.exit(0)# stop processPROCESSID = process_id().get(process_name)p = psutil.Process(pid=PROCESSID)p.kill()if process_id().get(process_name) is None:print "\033[32mprocess %s stop OK!!!\033[0m" \% process_name.split('/')[2]else:print "\033[31mProcess %s Stop Failed\!!![033[0m" \% process_name.split('/')[2]def process_init():# start processos.environ["JAVA_HOME"] = "/software/java_1.7"start_time = datetime.datetime.now()process_init_command = "%s/bin/startup.sh" % process_namestart = Popen(process_init_command, stdout=PIPE,stderr=PIPE, shell=True)stdout, stderr = start.communicate()print stderrprint "\033[32mWaitting Process %s Start OK !!!\033[0m" \% process_name.split('/')[2]while process_judgment() != 200:passend_time = datetime.datetime.now()print "\033[32mprocess start time(s):%s\033[0m" \% (end_time - start_time).seconds
View Code
操作文件脚本
1 #!/usr/bin/env python 2 # _*_coding:utf-8_*_ 3 # Author: "Edward.Liu" 4 # Author-Email: lonnyliu@126.compile 5 6 7 import os 8 import zipfile 9 import datetime 10 11 # set process directory vars 12 DEPLOY_ENV = "mobile" 13 DEPLOY_WAR = "cybershop-%s-0.0.1-SNAPSHOT.war" % DEPLOY_ENV 14 UPLOAD_WAR_DIRECTORY = "/software/source_files" 15 DEPLOY_TMP = "/software/deploy_tmp/" 16 DEPLOY_REALY = "/software/deploy_%s/" % DEPLOY_ENV 17 STATIC_DIRECTORY = "/data/www" 18 PICTURE_DIRECTORY = "/software/picture" 19 # Set process Diectory Vars end 20 # Set Process Used dir 21 Source_Path = "%s/%s" % (UPLOAD_WAR_DIRECTORY, DEPLOY_WAR) 22 now_time = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M") 23 Last_File = "%s%s-%s" % (DEPLOY_TMP, DEPLOY_WAR.split('.war')[0], now_time) 24 # Set process Used End 25 26 27 def process_judgment_dir(): 28 # 判断目录是否存在 29 if not os.path.exists(UPLOAD_WAR_DIRECTORY): 30 os.makedirs(UPLOAD_WAR_DIRECTORY) 31 elif not os.path.exists(DEPLOY_TMP): 32 os.makedirs(DEPLOY_TMP) 33 elif not os.path.exists(DEPLOY_REALY): 34 os.makedirs(DEPLOY_REALY) 35 else: 36 print "\033[32mUsed Dir Is exists\033[0m" 37 38 39 def process_source(): 40 """ 41 1.解压部署文件 42 2.创建图片存放目录 43 """ 44 ret = 0 45 # 图片目录创建 46 Last_File_Pic = "%s/assets" % Last_File 47 if not os.path.exists(Last_File): 48 # 创建程序目录 49 os.makedirs(Last_File) 50 # 创建图片目录 51 os.makedirs(Last_File_Pic) 52 try: 53 zip_ref = zipfile.ZipFile(Source_Path, 'r') 54 zip_ref.extractall(Last_File) 55 zip_ref.close() 56 ret = 1 57 return ret 58 except IOError: 59 print "\033[31m%s Is Not Exists Please send Files\033[0m" \ 60 % DEPLOY_WAR.split('.war')[0] 61 return ret 62 63 64 def process_link(): 65 if process_source() == 1: 66 # 创建项目启动所需链接 67 dest_pic = "%s/assets/upload" % Last_File 68 dest_static = "%s/www" % Last_File 69 os.symlink(PICTURE_DIRECTORY, dest_pic) 70 os.symlink(STATIC_DIRECTORY, dest_static) 71 # 创建项目启动所需链接----END 72 # 创建启动程序链接 73 dest_deploy_path = "%s%s" % (DEPLOY_REALY, DEPLOY_WAR.split('.war')[0]) 74 os.symlink(Last_File, dest_deploy_path) 75 if os.path.islink(dest_deploy_path): 76 print "\033[32mCrate Link Process Is Scueeful\033[0m" 77 # 创建启动程序链接----END
View Code
整合脚本
#!/usr/bin/env python # _*_coding:utf-8_*_ # Author: "Edward.Liu" # Author-Email: lonnyliu@126.compileimport handle_files import handle_process import argparse import sys import time import datetimedef check_arg(args=None):parser = argparse.ArgumentParser(description="EG: '%(prog)s' -p start|stop")parser.add_argument('-p', '--process', default='log',help='Input One of the {start|stop|status|log}')parser.add_argument('-v', '--version', action='version',version='%(prog)s 1.1')if len(sys.argv) == 1:parser.print_help()sys.exit(1)return parser.parse_args(args)def main():args = check_arg(sys.argv[1:])if args.process == "start":handle_process.process_init()elif args.process == "stop":handle_process.process_kill()elif args.process == "status":handle_process.process_status()elif args.process == "log":handle_process.process_log_info()elif args.process == "restart":handle_process.process_kill()time.sleep(10)handle_process.process_init()elif args.process == "deploy":handle_files.process_judgment_dir()print "\033[32mWaitting Unzip project\033[0m" + "." * 10start_time = datetime.datetime.now()handle_files.process_source()end_time = datetime.datetime.now()print "\033[32mPorject Unzip End-time(s):%s\033[0m" \% (end_time - start_time).secondshandle_process.process_kill()handle_files.process_link()handle_process.process_init()if __name__ == '__main__':main()
View Code
转载于:https://www.cnblogs.com/edwardlogs/p/Tomcat-Process-Deploy.html
tomcat 部署脚本相关推荐
- Tomcat:第五章:Tomcat 部署脚本编写
我们平时启动 Tomcat 过程是怎么样的? 复制WAR包至Tomcat webapp 目录. 执行starut.bat 脚本启动. 启动过程中war 包会被自动解压装载. 但是我们在 Eclipse ...
- [svc]jdk+tomcat部署.jforum论坛部署
安装jdk和tomcat jdk1.7.0_13(系列)下载url 我这里用的最新的jdk. 去官网下载即可 cd /usr/local/src/ tar xf jdk-8u162-linux-x64 ...
- 分享一例脚本发版和tomcat重启脚本
线上有个网站业务部署在tomcat上,由于频繁上线修改,需要经常启动tomcat. tomcat服务自带的bin下没有重启脚本,下面分享一例脚本发版和tomcat重启脚本: 1)现将业务代码从svn里 ...
- linux安装tomcat_【零基础学云计算】详述Linux系统中Tomcat部署及优化
Tomcat介绍 免费的.开放源代码的Web应用服务器 Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目 由Apache.Sun和一些公 ...
- Tomcat部署及优化
Tomcat部署及优化 [前言] 一.Tomcat概述 1.1 Tomcat介绍 1.2 Tomcat三个核心组件 1.3 Tomcat两个功能组件 Container容器 1.4 Java Serv ...
- Tomcat是干嘛用的?企业级Tomcat部署实践及安全调优
1.1 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人 ...
- Tomcat部署步骤
Tomcat部署步骤 一.将需要配置的软件包上传到服务器上,配置Java环境 1 ll 2 tar zxf jdk-8u91-linux-x64.tar.gz -C /opt 3 mv /opt/jd ...
- Tomcat部署与优化
目录 一.Tomcat简介 1.什么是Tomcat 2.Tomcat核心组件 3.Tomcat处理请求 4.小结 二.部署Tomcat 1.环境部署--JDK 2.安装启动Tomcat 3.tomca ...
- 理论+实操:tomcat部署及优化————理论讲解
前言: tomcat安装部署 虚拟主机配置 tomcat优化 下载网站: http://tomcat.apache.org/ 一:Tomcat介绍 免费的.开放源代码的Web应用服务器 Apache软 ...
最新文章
- 关于安徽赛区推广校赛的实施办法
- 1077: 字符串加密
- C语言中函数参数传递
- 使用Jest测试JavaScript (入门篇)
- Android控件之ConstraintLayout详解
- 大文件下载及视频点播的CDN加速实践
- 云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)
- 《视图更新与关系数据库理论》——2.1 关系和关系变量
- Python面试题解答——第一部分
- 一个简单的BP神经网络matlab程序(附函数详解)
- 【codevs1004】四子连棋
- 使用ResultReceiver的Android IntentService
- 正则表达式~~检索匹配的利器
- Centos操作系统
- R语言3.6.3安装教程
- 网络安全应急响应实施过程
- cocos2d-x中setcolor中的rgb颜色值设置
- Mountainous landscape
- 【CozeTalk】如何衡量你的人生-人生修炼手册-克莱顿·克里斯坦森
- python print怎么用_Python学习路线分享Beeprint怎么用