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和其他一些公司及个人 ...
随机推荐
- List<?>和List<T>的区别?
出自:https://www.zhihu.com/question/31429113
- Google Code jam Qualification Round 2015 --- Problem A. Standing Ovation
Problem A. Standing Ovation Problem's Link: https://code.google.com/codejam/contest/6224486/dashbo ...
- 2015年最热门前端框架React 入门实例教程
现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...
- Java NIO服务器端开发
一.NIO类库简介 1.缓冲区Buffer Buffer是一个对象,包含一些要写入和读出的数据. 在NIO中,所有的数据都是用缓冲区处理的,读取数据时,它是从通道(Channel)直接读到缓冲区中,在 ...
- SQL Server 全局变量
SQL Server中所有全局变量都使用两个@符号作为前缀 --1.@@error 最后一个T-SQL错误的错误号(目的是或得违反约束的错误号) insert into Subject values( ...
- PHP程序z中xdebug工具简要使用方法
PHP程序的debug PHP程序的debug,无论是cli方式还是web方式,都需要使用第三方的debug工具.PHP5.6之前,本身自带的debug功能,仅限于日志输出. 推荐使用免费xdebug ...
- 初次接触mootools
以下是今天所学代码,网上有这篇博客可供参考,另外还是推荐官方文档 ,以下是今天所敲代码: //用mootools创建类的方式: //方式1:用标准方式传入一个对象字面量 /* var Person = ...
- APP落地页开发中的一些小经验~
在开发日常落地页的时候,每当碰到一些很酷炫的宣传图用css实现很复杂且耗时的时候,一般采取切图然后将其放在页面中,在这个过程中发现<img/>标签中图片下方会有一行小空白,影响了与后一部分 ...
- 同源策略 JSONP(实践篇)
JSONP详解 json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西.今天总算搞明白了.下面一步步来搞清楚jsonp是个什么玩意. ...
- 【读书笔记】iOS-NSPredicate
一,Cocoa提供了一个名为NSPredicate的类,它用于指定过滤器的条件.可以创建NSPredicate对象,通过该对象准确地描述所需的条件,对每个对象通过谓词进行筛选,判断它们是否与条件相匹配 ...