• python 写接口供外部调用


    .py:

    import requests
    import urllib2
    import commands
    import subprocess
    
    
    
    def check():
        status, msg = commands.getstatusoutput("ps -ef | grep build_lp.sh | grep -Fv grep")
        if msg.find('build_lp.sh') > -1:
            print("build_lp.sh still running wait 1 second...")
            return True
        return False
    
    
    def offer_build(cmd, path, mode):
        if "/build_prod" == cmd:
            while check():
                time.sleep(1)
            realcmd = 'source ~/.bash_profile && source ~/.bashrc && cd %s && mkdir -p logs && mkdir -p data && bash bin/build_lp.sh %s >> ./logs/build_lp.log' % (path, mode)
            return commands.getstatusoutput(realcmd)
        elif "/build_prod_async" == cmd:   
             while check():
                return "1", "please wait for a while"
            realcmd = 'source ~/.bash_profile && source ~/.bashrc && cd %s && mkdir -p logs && mkdir -p data && bash bin/build_lp.sh %s >> ./logs/build_lp.log' % (path, mode)
            subprocess.Popen(realcmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            return 0, "done"
        else:
            print("method not found: support (/build_prod & /build_prod_async)")
            return commands.getstatusoutput('free')
    
    
    def app(environ, start_response):
        status, data = commands.getstatusoutput("ps -ef | grep start.sh | grep -Fv grep | awk '{print $10}'")
        if data != "prod":
            path = "/data1/menghui.lv/git/jupiteroffer/output" #debug 
            mode = "debug"
        else:
            path = "/data/jupiteroffer/output"                 #prod
            mode = "prod"
        timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
        rst = offer_build(environ['PATH_INFO'], path, mode)
        ret = {}    
        ret['status'] = 'ok' if rst[0] == 0 else 'error'
        ret['msg'] = rst[1]
        with open('control.log', 'a') as fo:
            fo.write("%s	%s	%s
    " %(timestamp, environ['PATH_INFO'], json.dumps(ret)))
        data = json.dumps(ret)
        start_response("200 OK", [
            ("Content-Type", "text/plain"),
            ("Content-Length", str(len(data)))
        ])
        return iter([data])
        print "hello"
    
    # end   

    .sh:

    #!/usr/bin/env bash
    
    if [ $#  == 0 ]; then
        echo "bash start.sh debug or bash start.sh prod"
    else
        echo "$1"
        mkdir -p logs
        sleep 1
        if [[ "prod" = $1 ]]; then
            port=8386
        else
            port=8200
        fi
        nohup gunicorn -k gevent --log-syslog  --max-requests=300 -w 5 -b 0.0.0.0:$port jupitercontrol:app >> ./logs/build.log 2>&1 &
        #gunicorn -k gevent --log-syslog  --max-requests=300 -w 5 -b 0.0.0.0:$port jupitercontrol:app                        
    fi
    # end
  • 相关阅读:
    java集合框架复习(一)
    java集合框架复习
    java集合框架
    Mysql视图的作用及其性能分析
    php语法基础
    MySQL UNION 与 UNION ALL 语法与用法
    mysql fetch 系列函数
    跨线程传递数据解决方案 ThreadLocal 和 HystrixRequestVariableDefault
    java中带参数的try(){}语法含义是什么?
    Activiti 设置comment的用户
  • 原文地址:https://www.cnblogs.com/lmh001/p/10298412.html
Copyright © 2020-2023  润新知