工作需要,为了快捷部署,节省时间,避免部署可能出现的错误问题(数据库的备份,应用的备份),一次写好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 ###[email protected] 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 [email protected]:%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 [email protected]:%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脚本需要注意对齐格式,免得执行过程报错。