#!/usr/bin/env python
# _*_ coding:UTF-8 _*_
import commands
import time,os,sys
from download_bag import downloadbag

tomcat_home = '/usr/local/apache-tomcat-7.0.42/'
webapp_name = 'front'
update_dir = "/home/deployer/update/"
backup_home = '/home/deployer/backup_war'
uptime = time.strftime('%Y%m%d',time.localtime(time.time()))
backup_time = time.strftime('%Y%m%d_%H%M',time.localtime(time.time()))

#关闭tomcat
def shutdown():
    print "准备关闭tomcat......"
    status,output=commands.getstatusoutput('ps -ef|grep -i '+tomcat_home+'|wc -l')
    if(int(output)>2): #判断是否有tomcat进程
        print "    开始关闭tomcat"
        status,output=commands.getstatusoutput(tomcat_home+'bin/shutdown.sh')
        if(status!=0):
            print output
            sys.exit(1)
        time.sleep(0.5) #关闭程序缓存时间
        status,output=commands.getstatusoutput('ps -ef|grep -i '+tomcat_home+'|wc -l')
        if(int(output)>2): #判断是否关闭成功
            print "    强制关闭tomcat"
            status,output=commands.getstatusoutput('kill -9 `ps -ef|grep -i '+tomcat_home+' |awk \'NR==1{print $2}\'`')
            if(status!=0):
                print output
                sys.exit(1)
        print "    已关闭tomcat"
        return 0
    print "    tomcat未启动"

#备份tomcat
def backup():
    print "开始备份......"
    #判断今日备份目录是否存在,不存在则创建
    if(not os.path.exists(backup_home+'/'+webapp_name+'/'+backup_time)):
        status,output=commands.getstatusoutput('mkdir -p '+backup_home+'/'+webapp_name+'/'+backup_time)
        if(status!=0):
            print output
            sys.exit(1)
#    #备份当前版本,备份前先判断目录是否是空的
    if(len(os.listdir(tomcat_home+'webapps/'))>0):
        status,output=commands.getstatusoutput('mv '+tomcat_home+'webapps/* '+backup_home+'/'+webapp_name+'/'+backup_time)
        if(status!=0):
            print output
            sys.exit(1)
    print '    备份成功'

from download_bag import downloadbag
#部署新程序
def update():
    print "开始部署....."
    #部署新war包到tomcat里
    status,output=commands.getstatusoutput('cp -rf '+update_dir+uptime+'/'+webapp_name + '.war ' + tomcat_home+'webapps/')
    if(status!=0):
        print output
        sys.exit(1)
    #启动tomcat
    status,output=commands.getstatusoutput(tomcat_home+'bin/startup.sh')
    print output

if __name__ == '__main__':
       if os.geteuid() == 0:
            print '''
                  ***************************************************************************
                  **********  hi,hi,hi.......请注意                             ***************
                  *********  不能用root账号,请使用deployer账号,现在正在退出' ***************
                  *********  exit now                                                 ********
                  '''
            sys.exit(1)
       else:
            downloadbag()
            shutdown()
            backup()
            update()

python更新tomcat脚本的更多相关文章

  1. python更新数据库脚本两种方法

    最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...

  2. python更新数据库脚本三种方法

    最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...

  3. 【Python】python更新数据库脚本两种方法

    最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新   1 import ...

  4. sh 脚本重启/更新 Tomcat 项目

    一.项目文件为一个 jar 包,无须解压 重启 Tomcat 项目 #!/bin/bash echo "kill hot-jdt" kill -9 `ps -ef|grep hot ...

  5. 【Quick 3.3】资源脚本加密及热更新(一)脚本加密

    [Quick 3.3]资源脚本加密及热更新(一)脚本加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.脚本加密 quick框架已经封装好加密模块,与加密有关的文件在引擎目录/quic ...

  6. python编写shell脚本详细讲解

    python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...

  7. python注释、脚本参数、字节码

    python注释.脚本参数.字节码 --道心 python安装 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3. ...

  8. Python数据库备份脚本

    Python数据库备份脚本 #!/usr/bin/env python # author: liudong # -*- coding: utf-8 -*- # filename: db_bak.py ...

  9. 「python」: arp脚本的两种方法

    「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re de ...

随机推荐

  1. xhr.withCredentials发送跨域请求凭证

    一.前言 今天遇到一个坑,浏览器请求数据的时候gg了.浏览器报错如下图: 因为请求头部设置了credentis mode is 'include', 从上面可以看出是Access-Control-Al ...

  2. Java基础系列--ArrayList集合

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8494618.html 一.概述 ArrayList是Java集合体系中最常使用,也是最简单 ...

  3. 深入理解JavaScript的事件循环(Event Loop)

    一.什么是事件循环 JS的代码执行是基于一种事件循环的机制,之所以称作事件循环,MDN给出的解释为 因为它经常被用于类似如下的方式来实现 while (queue.waitForMessage()) ...

  4. 通过webservice(System.Data.OracleClient)调试oracle

    环境:vs2008+webservice+net framework3.5+oracle10g 原因:在项目中运行web程序,默认是使用vs内置web服务器(develop server),而这个内置 ...

  5. C# 快速释放内存的大数组

    本文告诉大家如何使用 Marshal 做出可以快速释放内存的大数组. 最近在做 3D ,需要不断申请一段大内存数组,然后就释放他,但是 C# 对于大内存不是立刻释放,所以就存在一定的性能问题. 在博客 ...

  6. 【RabbitMQ】8、RabbitMQ之mandatory和immediate

    1. 概述 mandatory和immediate是AMQP协议中basic.publish方法中的两个标识位,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能.对于刚开始接触Rabbi ...

  7. LintCode Sqrt(x)

    Implement int sqrt(int x). Compute and return the square root of x. Have you met this question in a ...

  8. 一次关于()=>({})的使用

    今天遇到了一个问题,值得一记 首先在我看项目代码时发现了一个问题 有一个JS的export如下 大家可以注意一下config 这里为什么要如此写法呢? 首先这里用的时ES6的箭头函数 ()=>{ ...

  9. 从零开始学习html(八)CSS选择器——下

    六.子选择器 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...

  10. 世界地图和主要国家的 JSON 文件

    转自:http://blog.csdn.net/chinagissoft/article/details/52136253 世界地图: world.json 美洲: 美国:USA.json 加拿大:C ...