tomcat 部署脚本
将一下3个脚本放到一个目录里,做成一个 python 的包即可使用
脚本介绍
操作服务脚本
#!/usr/bin/env python
# _*_coding:utf-8_*_
# Author: "Edward.Liu"
# Author-Email: lonnyliu@126.compile """
process hanlde files incloud
1.process status
use request get Url returncode
2.process Stop
use psutil kill process
3.process start
use subprocess run shell start process
4.process log
use process logs
5.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 pid
process_base_str = "-Dcatalina.base=%s" % process_name
pid = {}
for proc in psutil.process_iter():
try:
pinfo = proc.as_dict(attrs=['pid', 'name', 'cmdline'])
except psutil.NoSuchProcess:
pass
else:
if process_base_str in pinfo.get('cmdline'):
pid[process_name] = pinfo.get('pid')
return pid def process_judgment():
# 判断 URL 的状态码
messages = ""
try:
jenkins_r = requests.get(url, timeout=None)
return jenkins_r.status_code
except requests.ConnectTimeout:
messges = "Timeout"
return messges
except requests.ConnectionError:
messages = "connection"
return messages
except requests.HTTPError:
messages = "httperror"
return messages
else:
return messages def process_status():
# judgment process status
if 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_name
process_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 line
print returncode
except KeyboardInterrupt:
print 'ctrl+d or z' def process_kill():
# judgment process exist
if 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 process
PROCESSID = 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 process
os.environ["JAVA_HOME"] = "/software/java_1.7"
start_time = datetime.datetime.now()
process_init_command = "%s/bin/startup.sh" % process_name
start = Popen(process_init_command, stdout=PIPE,
stderr=PIPE, shell=True)
stdout, stderr = start.communicate()
print stderr
print "\033[32mWaitting Process %s Start OK !!!\033[0m" \
% process_name.split('/')[2]
while process_judgment() != 200:
pass
end_time = datetime.datetime.now()
print "\033[32mprocess start time(s):%s\033[0m" \
% (end_time - start_time).seconds
操作文件脚本
#!/usr/bin/env python
# _*_coding:utf-8_*_
# Author: "Edward.Liu"
# Author-Email: lonnyliu@126.compile import os
import zipfile
import datetime # set process directory vars
DEPLOY_ENV = "mobile"
DEPLOY_WAR = "cybershop-%s-0.0.1-SNAPSHOT.war" % DEPLOY_ENV
UPLOAD_WAR_DIRECTORY = "/software/source_files"
DEPLOY_TMP = "/software/deploy_tmp/"
DEPLOY_REALY = "/software/deploy_%s/" % DEPLOY_ENV
STATIC_DIRECTORY = "/data/www"
PICTURE_DIRECTORY = "/software/picture"
# Set process Diectory Vars end
# Set Process Used dir
Source_Path = "%s/%s" % (UPLOAD_WAR_DIRECTORY, DEPLOY_WAR)
now_time = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M")
Last_File = "%s%s-%s" % (DEPLOY_TMP, DEPLOY_WAR.split('.war')[0], now_time)
# Set process Used End def process_judgment_dir():
# 判断目录是否存在
if not os.path.exists(UPLOAD_WAR_DIRECTORY):
os.makedirs(UPLOAD_WAR_DIRECTORY)
elif not os.path.exists(DEPLOY_TMP):
os.makedirs(DEPLOY_TMP)
elif not os.path.exists(DEPLOY_REALY):
os.makedirs(DEPLOY_REALY)
else:
print "\033[32mUsed Dir Is exists\033[0m" def process_source():
"""
1.解压部署文件
2.创建图片存放目录
"""
ret = 0
# 图片目录创建
Last_File_Pic = "%s/assets" % Last_File
if not os.path.exists(Last_File):
# 创建程序目录
os.makedirs(Last_File)
# 创建图片目录
os.makedirs(Last_File_Pic)
try:
zip_ref = zipfile.ZipFile(Source_Path, 'r')
zip_ref.extractall(Last_File)
zip_ref.close()
ret = 1
return ret
except IOError:
print "\033[31m%s Is Not Exists Please send Files\033[0m" \
% DEPLOY_WAR.split('.war')[0]
return ret def process_link():
if process_source() == 1:
# 创建项目启动所需链接
dest_pic = "%s/assets/upload" % Last_File
dest_static = "%s/www" % Last_File
os.symlink(PICTURE_DIRECTORY, dest_pic)
os.symlink(STATIC_DIRECTORY, dest_static)
# 创建项目启动所需链接----END
# 创建启动程序链接
dest_deploy_path = "%s%s" % (DEPLOY_REALY, DEPLOY_WAR.split('.war')[0])
os.symlink(Last_File, dest_deploy_path)
if os.path.islink(dest_deploy_path):
print "\033[32mCrate Link Process Is Scueeful\033[0m"
# 创建启动程序链接----END
整合脚本
#!/usr/bin/env python
# _*_coding:utf-8_*_
# Author: "Edward.Liu"
# Author-Email: lonnyliu@126.compile import handle_files
import handle_process
import argparse
import sys
import time
import datetime def 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" + "." * 10
start_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).seconds
handle_process.process_kill()
handle_files.process_link()
handle_process.process_init() if __name__ == '__main__':
main()
tomcat 部署脚本的更多相关文章
- [svc]jdk+tomcat部署.jforum论坛部署
安装jdk和tomcat jdk1.7.0_13(系列)下载url 我这里用的最新的jdk. 去官网下载即可 cd /usr/local/src/ tar xf jdk-8u162-linux-x64 ...
- linux下实现自动部署tomcat的脚本
linux下实现自动部署tomcat的脚本 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务.备份war包.上传新的war包.启动服务.索性就写了一个自动部署的脚本. 脚本如下a ...
- Tomcat项目自动部署脚本
一般情况下使用的Linux环境都是加固的,root路径只有超级管理员权限才能进入.我们新建一个自己的用户,在/home下会有一个用户目录,传输war包都放在这个目录下,此时不动webapps文件下的内 ...
- eclipse运行没问题,tomcat以脚本启动后插入数据库的中文会乱码
记一次部署工程的时候遇到的问题 部署war包到win7的时候发现,布上去后插入数据库的中文会乱码,然后发现用eclipse运行源码没问题,一开始以为是war打出来的时候编码错误,然后将eclipse的 ...
- Tomcat重启脚本restart.sh停止脚本stop.sh
Tomcat重启脚本restart.sh停止脚本stop.sh Tomcat本身提供了 startup.sh(启动)shutdown.sh(关闭)脚本,我们在部署中经常会出现死进程形象,无法杀掉进程需 ...
- Java web项目在linux环境下自动编译和部署脚本
自动编译脚本 build.sh, 放置在项目根目录下. #!/bin/bash # check args # init path CURRPATH=`pwd` LIBDIR="$CURRPA ...
- Tomcat 部署
<CATALINA_HOME>/webapps: Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录. 1.war包部署: 将需要发布的web应用打成war文件, ( ...
- Tomcat 部署安装及JVM调优~
Tomcat 部署Tomcat环境 环境准备 linux: CentOS 7.3 tomcat: 9.0.0.M21 jdk: 1.8.0_131 ip: 192.168.1.5 tomcat官方下载 ...
- 企业级Tomcat部署实践及安全调优
1.1 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人 ...
随机推荐
- thread_Semaphore信号量
Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制. 使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数. 一个计数信 ...
- Javascript小笔记
1.315360000000 毫秒 = 10年 2.Javascript 取时间截: JavaScript 获取当前时间戳: 第一种方法: var timestamp = Date.parse(new ...
- 演练:使用Xamarin.Forms开发产品介绍性质的应用(VB版)
概述 Xamarin这个使用mono和.net core的跨平台开发框架这几年在不断发展.被微软收购后的Xamarin为个人开发者提供了免费版的Xamarin for Visual Studio,吸引 ...
- JPA(5)使用二级缓存
jpa的缓存分为一级缓存和二级缓存,一级缓存值得是会话级别的,而二级缓存是跨会话级别的. 使用二级缓存,使用到了Ehcache,首先第一步需要在配置文件中配置使用了二级缓存 <shared-ca ...
- elasticsearch分词插件的安装
IK简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源项目Luen ...
- artTemplate 介绍
artTemplate 是新一代 javascript 模板引擎,它采用预编译方式让性能有了质的飞跃,并且充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现. 编 ...
- 使用HyperV虚拟机装系统
新建虚拟机 新建虚拟机 进行相关参数设置 选择系统安装镜像位置,名称及位置 指定代数一般为1代即可 为虚拟机运行分配内存 创建虚拟硬盘或连接已有虚拟硬盘,并分配硬盘空间 核对创建虚拟机相关信息 安装系 ...
- ArcGIS中的style样式的使用
MapGIS安装包大小(以M计算)与ArcGIS (以G计算)在数量级存在差异,就可以隐约知道ArcGIS功能的强大.ArcGIS更注重重用(比如符号库.模块等).数据与制图分离(尤其是制图表达最能体 ...
- SharePoint 2013 开启访问请求
1.通常,我们进入SharePoint 2013站点,如果没权限会提示该站点未被共享,而没有切换账号或者申请访问,实在是很流氓:其实,SharePoint为我们提供了访问请求页面,但是可能需要手动开启 ...
- 【读书笔记】iOS-GCD-block
一,block的定义 //申明变量 (void)(^PrintStr)(void); //定义 PrintStr=^{ NSLog(@"PrintStr"); }; //调用 Pr ...