zoukankan      html  css  js  c++  java
  • nginx tomcat 自动部署python脚本【转】

    #!/usr/bin/env python
    #--coding:utf8--
    import sys,subprocess,os,datetime,paramiko,re
    local_path='/home/pangpeng/'
    nginx_web_path='/var/www/html/'
    tomcat_webapps_path='/usr/local/tomcat7/webapps/'
    backup_nginx_path='/tmp/backup_nginx/'
    backup_tomcat_app='/tmp/backup_tomcat_app/'
    username='root'
    port=22 #ssh port
    
    def web(web_dir,update_ip):
        #creat remote backup_path
        creat_backup_dir_cmd = 'mkdir '+backup_nginx_path
        exec_cmd(update_ip,creat_backup_dir_cmd)
    
        current_date = datetime.datetime.now().strftime("%Y%m%d%H%M")
        cmd = 'mv '+nginx_web_path+web_dir+' '+backup_nginx_path+web_dir+'_'+current_date
        #backup
        exec_cmd(update_ip,cmd)
        #upload file
        upload_cmd = 'scp -r '+local_path+web_dir+' '+update_ip+':'+nginx_web_path
        print(upload_cmd)
        subprocess.Popen(upload_cmd,shell=True,stdout=subprocess.PIPE)
        #change owner
        #chmod_cmd='chown -R jujusport.jujusport '+nginx_web_path+web_dir
        #exec_cmd(update_ip,chmod_cmd)
    
    def tomcat(tomcat_ip,app):
    
        root_dir = re.split('.',app)[0]
        creat_backup_tomcat_app_cmd = 'mkdir '+backup_tomcat_app
        current_date = datetime.datetime.now().strftime("%Y%m%d%H%M")
        tomcat_cmd='pkill -15 java;sleep 5;'+'mv '+tomcat_webapps_path+app+' '+backup_tomcat_app+app+'_'+current_date
        tomcat_cmd2='mv '+tomcat_webapps_path+root_dir+' '+backup_tomcat_app+root_dir+'_'+current_date
        upload_cmd='scp '+local_path+app+' '+tomcat_ip+':'+tomcat_webapps_path
        cmd='sudo -u jujusport /usr/local/tomcat7/bin/catalina.sh start'
    
        #create backup dir
        exec_cmd(tomcat_ip,creat_backup_tomcat_app_cmd)
        #backup PacketName.war PacketName
        exec_cmd(tomcat_ip,tomcat_cmd)
        exec_cmd(tomcat_ip,tomcat_cmd2)
        #upload file
        subprocess.Popen(upload_cmd,shell=True,stdout=subprocess.PIPE)
        print "upload done:"+upload_cmd
        #start tomcat
        exec_cmd(tomcat_ip,cmd)
    
    
    def exec_cmd(server_ip, cmd):
        paramiko.util.log_to_file('/tmp/paramiko.log')
        pkey='/root/.ssh/id_rsa'
        key=paramiko.RSAKey.from_private_key_file(pkey)
        s=paramiko.SSHClient()
        s.load_system_host_keys()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(server_ip,port,username,pkey=key)
        try:
            print server_ip+':'+cmd
            stdin,stdout,stderr=s.exec_command(cmd)
            print 'stdout:'+stdout.read()
            print 'stderr:'+stderr.read()
        except Exception, e:
            print e
        finally:
            s.close()
    
    def cleanstore(server_ip,back_up_dir):
        command = "find %s -type d -mtime +30 |xargs rm -fr" %(back_up_dir)
        exec_cmd(server_ip,command)
    if __name__ == "__main__":
        print  '''
                example:deploy.py web v1
                example:deploy.py tomcat 192.168.1.192 ROOT.war
                '''
        if (sys.argv[1] == 'web') and (sys.argv[2]=='v1'):
            web("v1",'192.168.1.193')
            cleanstore('192.168.1.193',backup_nginx_path)
        elif (sys.argv[1] == 'tomcat') and (sys.argv[2]=='192.168.1.192'):
            tomcat('192.168.1.192',sys.argv[3])
            cleanstore('192.168.1.192',backup_tomcat_app)
        elif (sys.argv[1] == 'tomcat') and(sys.argv[2]=='192.168.1.193'):
            tomcat('192.168.1.193',sys.argv[3])
            cleanstore('192.168.1.193',backup_tomcat_app)
        else:
            sys.exit(0)

    sed -i 's/Defaults    requiretty/#Defaults    requiretty/' /etc/sudoers

    #visudo 注释掉Defaults    requiretty 

    不然无法执行:

    cmd='sudo -u jujusport /usr/local/tomcat7/bin/catalina.sh start'
        exec_cmd(tomcat_ip,cmd)

    转自

    nginx tomcat 自动部署python脚本 - CSDN博客 http://blog.csdn.net/u013636377/article/details/50556443

  • 相关阅读:
    第三方登陆--新浪
    YII2.0邮箱发送
    MYSQL 数据库实现远程连接
    MEMCACHE所有方法及参数详解
    把时间转成适合符合日常习惯的格式【js】
    mvc的自带json序列化的datetime在js中的解析
    如何在word中的第3+n页处插入页面并重新从1开始
    古怪的运算符=+
    【摘录】某表含有N个字段超精简模糊查询方法
    C#中快速释放内存,任务管理器可查证
  • 原文地址:https://www.cnblogs.com/paul8339/p/8416193.html
Copyright © 2011-2022 走看看