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和其他一些公司及个人 ...
随机推荐
- 准备.Net转前端开发-WPF界面框架那些事,搭建基础框架
题外话 最近都没怎么写博客,主要是最近在看WPF方面的书<wpf-4-unleashed.pdf>,挑了比较重要的几个章节学习了下WPF基础技术.另外,也把这本书推荐给目前正在从事WPF开 ...
- thread_ThreadPoolExecutor
目录 1.基础知识 2.简单应用 3.异常机制 4.丰富的扩展 一.基础知识 构造函数. public ThreadPoolExecutor( int corePoolSize, 指的是保留的线程池大 ...
- 已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。
错误:已超过传入消息(65536)的最大消息大小配额.若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性. 或者 错误:反序列化操作“GetAllUserData ...
- 具有timeout 功能的函数调用
做项目的时候有时经常会需要一个带有timeout功能的函数调用. 比如从后台读数据并期望在给定时间内返回.借此机会包装了一个简单的C# class, 直接上代码吧. public class Time ...
- Windows下 C++ 实现匿名管道的读写操作
由于刚弄C++没多久,部分还不熟练,最近又由于开发需求要求实现与其他程序进行通信,瞬间就感觉想到了匿名通信.于是自己查阅了一下资料,实现了一个可读可写的匿名管道: 源代码大部分都有注释: Pipe.h ...
- activiti 工作流
1. 工作流的概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实 ...
- 初学Java9:学习Mybatis时报错:Parameter 'name' not found. Available parameters are [1, 0, param1, param2]
报错-->Parameter 'name' not found. Available parameters are [1, 0, param1, param2] 百度找到这篇文章完成修改 htt ...
- percona 5.6升级到5.7相关error及解决方法
今早,把开发环境的mysql升级到了5.7.15,5.6数据导入后,启动一切正常,检查.err日志,发现有如下异常: 2016-10-31T00:29:33.187073Z 0 [Warning] S ...
- c#反射获取常量属性名以及其值(真正可用)
最近因为要开发rpc平台的c#客户端,其中部分常量类为了自动加载的map,需要反射解析出静态常量,往上搜了一堆,都各种的不靠谱. 亲自研究了下,如下: Type t = typeof(SpiderEr ...
- web安全——系统(Linux)
简介 最小(少)原则,是安全的重要原则.最小的权限,最小的用户,最少的服务,最少的进程,是最安全的. 系统安全包括:文件系统保护.用户管理安全.进程的保护以及日志的管理. 场景 确保服务最少,每个都是 ...