`
oboaix
  • 浏览: 275266 次
社区版块
存档分类
最新评论

Linux和Python脚本自动部署应用一例(2)

 
阅读更多

工作需要,为了快捷部署,节省时间,避免部署可能出现的错误问题(数据库的备份,应用的备份),一次写好Linux和Python的脚本,多次使用,原创做个笔记:

此文与前面的 Linux和Python脚本自动部署应用一例(1) 完成相同的功能操作:

Linux python script:

#!/usr/bin/python
###dennis zhao  python script automatic deploy application server
###2013-08-01  python 2.6
###27202787@qq.com

import sys,os,time,shutil, filecmp
print ("start backup database .......");
oscommand = 'ver'
backup_sql_path="/data2/backup/sql2"
backup_war_path="/data2/backup/war2"
logs_path='/tmp/log.log'
current_date=time.strftime('%Y-%m-%d')
current_datetime=time.strftime('%Y%m%d%H%M%S')
db_name="laneige"
password="xxxx2011"
db_host="localhost"
mysql_user="root"

def writeLogs(filename,contents):
    f=open(filename,'a+');
    f.write(contents);
    f.close();

if not os.path.exists(backup_sql_path):
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    if(os.mkdir(backup_sql_path))==None:
        Msg+='**succeed to create dir:'+backup_sql_path+'\n'
        writeLogs(logs_path,Msg)
    else:
        Msg+='!!create backup dir:'+backup_sql_path+'failed,check whether dir can write! nn'
        writeLogs(logs_path,Msg)

if not os.path.exists(backup_war_path):
    Msg='-'*30+time.strftime('%Y-%m-%d,%H:%M:%S')+'-'*30+'\n'
    if(os.mkdir(backup_war_path))==None:
        Msg+='**succeed to create dir:'+backup_war_path+'\n'
        writeLogs(logs_path,Msg)
    else:
        Msg+='!!create backup dir:'+backup_war_path+'failed,check whether dir can write! nn'
        writeLogs(logs_path,Msg)
    sys.exit()


param=raw_input("Please input deployment version(stress or staging or prod) :");
password="no password";
backup_name=backup_sql_path+"/" + current_datetime+".sql"
if (param == "stress" or param == "" or param == "local"):
    password="xxxx2012"
    bak_cmd='mysqldump -h%s -u%s -p%s %s  > %s  ' %(db_host,mysql_user,password,db_name,backup_name);
    os.system(bak_cmd);
    os.system("pwd");
    os.system("tar -zcvf %s.tar.gz %s --remove-files" %(backup_name,backup_name));
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    writeLogs(logs_path,Msg+"Bacakup database finishded.\n");
elif (param == "staging" ):
    password="xxxx2011"
elif (param == "prod"):
    password="xxxx2014"
time.sleep(4);
print "#"*60;

print ("backup application war and update svn programme start..........");
resource="/data/src/laneige"
tomcat_home="/opt/app/tomcat"
webapps="/opt/app/tomcat/webapps"
backup_cmd="cp  %s/laneige_Web.war %s/laneige_Web_%s.war" %(webapps, backup_war_path,current_datetime);
os.system(backup_cmd);
time.sleep(6);
svn_cmd="cd %s;svn up" %(resource);
os.system(svn_cmd);
time.sleep(3);
print ("backup application war and update svn programme end ........");
print "#"*60;

print "compile class file.............begin............."
if (param == "stress" or param == "" or param == "local"):
    mvn_cmd="cd %s;mvn -U clean package -PSTRESS" %(resource);
    os.system(mvn_cmd);
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    writeLogs(logs_path,Msg+"Complie all java files to generate war.\n");
elif (param == "staging" ):
    mvn_cmd="cd %s;mvn -U clean package -PSTAGING" %(resource);
    os.system(mvn_cmd);
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    writeLogs(logs_path,Msg+"Complie all java files to generate war.\n");
elif (param == "prod"):
    mvn_cmd="cd %s;mvn -U clean package -PPROD" %(resource);
    os.system(mvn_cmd);
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    writeLogs(logs_path,Msg+"Complie all java files to generate war.\n");
time.sleep(2);
print "compile class file.............end............."
print "="*60;

source_war="/data/src/laneige/laneige-web/target/laneige_Web.war"
target_path="/data/src/temp1";
print "start application server.............begin............."
if (param == "stress" or param == "" or param == "local"):
    kill_cmd="kill `ps -ef | grep tomcat | awk '{print $2,$8}' | grep 'java$'| awk '{print $1}'`";
    os.system(kill_cmd);
    time.sleep(3);
    os.system("rm -rf %s/laneige_Web*" %(webapps));
    time.sleep(3);
    os.system("cp -rf %s %s/" %(source_war,webapps));
    time.sleep(3);
    os.system("%s/bin/startup.sh " %(tomcat_home));
    time.sleep(3);
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    writeLogs(logs_path,Msg+"Deploy finished.\n");
elif (param == "staging" ):
    scp_cmd="scp -P 1122 %s root@192.168.10.125:%s" %(source_war, target_path);
    os.system(scp_cmd);
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    writeLogs(logs_path,Msg+"Copy to staging finished.\n");
elif (param == "prod"):
    scp_cmd="scp -P 60 %s root@192.168.11.185:%s" %(source_war,target_path);
    os.system(scp_cmd);
    Msg='-'*30+time.strftime('%Y-%m-%d %H:%M:%S')+'-'*30+'\n'
    writeLogs(logs_path,Msg+"Copy to prod finished.\n");
time.sleep(2);
print "start application server.............end............."

 

注意:python脚本需要注意对齐格式,免得执行过程报错。

 

 

分享到:
评论
1 楼 hamizhong 2016-05-30  

相关推荐

    Python3+PhantomJS登陆网站

    6. **部署和运行**:在Linux服务器上部署这个解决方案时,首先需要解压文件,然后设置好Python3和PhantomJS的路径,最后运行Python脚本来启动自动登录流程。可能还需要处理权限、环境变量等问题,确保所有依赖正确...

    Linux 环境部署脚本,一键配置系统设置,安装常用工具开发环境渗透测试工具等.zip

    本文将深入探讨如何使用shell脚本来实现这一目标,以标题"Linux环境部署脚本,一键配置系统设置,安装常用工具开发环境渗透测试工具等.zip"为例,我们将分析其中的核心内容——`init.sh`。 首先,`init.sh`通常是一...

    部署Python的框架下的web app的详细教程

    ### 部署Python Web应用至Linux服务器的详细教程 #### 概述 本文将详细介绍如何将基于Python的Web应用程序部署到Linux服务器上,并重点介绍部署过程中涉及的关键技术和步骤。文章假设读者具备一定的Python编程基础...

    Zabbix自定义修改脚本的一个小集合。_Python_下载.zip

    _Python_下载.zip"为例,介绍如何利用Python编写和应用这些脚本。 首先,我们关注的是"zabbix-alertscripts-master"这个文件夹,它通常包含了Zabbix报警脚本的源代码。在Zabbix中,当触发器触发时,系统会调用这些...

    Python库 | heroku-tools-0.3.1.tar.gz

    综上所述,"heroku-tools-0.3.1.tar.gz"是一个用于Python开发的实用工具集,旨在简化Heroku平台上的应用管理和部署。了解并有效地利用这样的库,对于提升Python开发者在Heroku平台上的工作效率具有重要意义。

    python定时备份文件

    在IT行业中,Python是一种强大的脚本语言,广泛用于自动化任务,包括文件管理和备份。本话题主要探讨如何使用Python实现文件的定时压缩备份。这个过程通常涉及两个关键部分:定时器和文件压缩。以下是对这两个核心...

    Python-导出systemd日志到一个外部服务如cloudwatchelasticsearch

    Systemd是Linux系统中广泛使用的初始化系统,它记录了系统的各种操作和服务状态,而Python则作为一种强大的编程语言,常被用于日志处理和自动化任务。本文将详细介绍如何使用Python将systemd日志导出到外部服务,如...

    Python库 | frida-7.1.12-py3.5-linux-i686.egg

    总之,`frida-7.1.12-py3.5-linux-i686.egg` 提供了一个强大的工具,让Python开发者能够利用Frida的强大功能,进行代码调试、插桩以及各种运行时分析,无论是对于开发、测试还是运维,都有着广泛的应用场景。

    基于Python的混合语言编程及其实现.pdf

    5. **广泛的平台支持**:Python可以在多种操作系统上运行,包括Windows、macOS、Linux等,这使得开发者可以轻松地跨平台开发和部署应用。 #### 混合语言编程的应用 在实际项目中,混合语言编程通常涉及系统编程...

    python textbook

    - **移动 App 开发**:利用 Kivy 或其他跨平台框架,实现一款移动应用并部署至 Android 和 iOS 平台。 #### 八、总结 - **Python 生态圈**:总结 Python 社区的发展历程、开源库资源、在线学习平台等信息,为学习者...

    Linux应用集成MySQL数据库访问技巧

    为了更直观地理解MySQL在Linux应用中的集成过程,以下以一个简单的Tcl脚本为例,展示如何通过Tcl语言与MySQL交互: ```tcl package require mysqltcl # 连接数据库 set db [mysql::connect -host localhost -user ...

    python学习1.0setupenv[收集].pdf

    在本例中,操作系统选用的是Red Hat Enterprise Linux 5,这是一种稳定且广泛使用的服务器级Linux发行版。数据库选择的是ORACLE XE 10g,而Python版本为2.4,虽然这个版本现在已较为陈旧,但它是Django 1.2.4所支持...

    PyPI 官网下载 | frida-7.1.5-py2.7-linux-x86_64.egg

    6. 根据需求编写使用Frida的Python脚本,并执行。 在实际操作中,开发者和运维人员可能还需要处理权限问题、依赖冲突以及与现有系统的集成。理解Frida的用法和Python Egg的机制,对Linux环境的熟悉,以及对Python包...

    websphere发布应用程序

    4. **创建或获取待发布的应用程序**:本文将以“SuperMap IS Java”为例进行演示,这是一个GIS(地理信息系统)相关的Java应用程序。 #### 三、部署应用程序到WebSphere 接下来详细介绍如何将SuperMap IS Java应用...

    Python代码打包成exe可执行文件(以圣诞树代码打包为例)

    在Python编程中,有时我们需要将编写好的代码分享给不熟悉编程环境的朋友,或者为了方便部署,需要将Python脚本转换为可以直接在Windows操作系统上运行的.exe可执行文件。本教程将以一个简单的“圣诞树”代码为例,...

    Python库 | cx_Freeze-6.8.1-cp37-cp37m-win_amd64.whl

    它的工作原理是将Python解释器、必要的标准库以及你的应用程序代码一起打包,生成一个可以在目标系统上直接运行的二进制文件,极大地简化了分发和部署的过程。 **cx_Freeze的安装与使用** 1. **安装**:在本例中,...

    python学习2.0Apache配置.pdf

    这里以32位的Red Hat Enterprise Linux 5为例,同时安装了Oracle XE 10g作为数据库,以及Python 2.7.1和Django 1.2.4。确保操作系统、数据库和Python版本与你的需求相匹配。 2. Django配置 Django是Python中最流行...

    Linux环境下的项目开发指南.pdf

    随着技术的发展,Linux因其高度的灵活性、稳定性和安全性,成为了软件开发领域的首选操作系统之一。它不仅支持多种编程语言,还提供了丰富的工具集来辅助开发流程。对于希望在Linux环境下进行项目开发的开发者来说,...

    内网建自己的pip源,详细教程和代码

    - `setuptools`: 用于创建、管理和部署Python包的工具。 - `wheel`: 用于处理Python的.whl二进制包格式,提高安装速度。 - `simple-http-server`: 用于提供HTTP服务,让内网中的其他机器可以访问你的pip源。 2. ...

    Python库 | tdl-4.4.0-cp35-cp35m-win_amd64.whl

    安装完成后,可以在Python脚本中导入`tdl`库并开始使用其提供的功能。 **总结** `tdl`库是Python游戏开发的一个宝贵工具,尤其适合创建终端风格的图形界面。通过其强大的渲染和事件处理能力,开发者可以轻松创建出...

Global site tag (gtag.js) - Google Analytics