3

我的代码位于/home/ubuntu/api远程服务器中。WSGI 对象被命名app并且它存在于/home/ubuntu/api/api.py. 我的 gunicorn conf 文件被调用gunicorn.conf.py并存在于/home/ubuntu/api

我的gunicorn.conf.py

import multiprocessing

bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1
backlog = 2048
worker_class = 'gevent'
daemon = True
debug = True
loglevel = 'debug'
accesslog = '/mnt/log/gunicorn_access.log'
errorlog = '/mnt/log/gunicorn_error.log'
max_requests = 1000
graceful_timeout = 20

我正在尝试通过结构在服务器上远程启动 gunicorn。我的面料代码看起来像这样

@roles('stag_api')
def run_server():
    with cd('/home/ubuntu/api'):
        sudo('gunicorn -c gunicorn.conf.py api:app')

现在 fabric 没有显示任何错误,但 gunicorn 没有启动。

所以我创建__init__.py/home/ubuntu/api一个包。我在__init__.py文件中写了这个

from api import app

这使得 WSGIapp在包的命名空间中可用。然后我把我的面料代码改成了这个

@roles('stag_api')
def run_server():
    sudo('gunicorn -c /home/ubuntu/api/gunicorn.conf.py api:app')

即使现在织物也没有显示任何错误,但独角兽没有启动。

所以我创建了一个名为的shell脚本server,它的代码看起来像这样

if [ "$1" = "start" ]; then
        echo 'starting'
        gunicorn -c /home/ubuntu/api/gunicorn.conf.py api:app
fi

if [ "$1" = "stop" ]; then
        echo 'stopping'
        pkill gunicorn
fi

if [ "$1" = "restart" ]; then
        echo 'restarting'
        pkill gunicorn
        gunicorn -c /home/ubuntu/api/gunicorn.conf.py api:app
fi

我把这个shell脚本放在/home/ubuntu/api

现在我的面料代码看起来像这样

@roles('stag_api')
def stag_server(action='restart'):
    if action not in ['start', 'stop', 'restart']:
        print 'not a valid action. valid actions are start, stop and restart'
        return
    sudo('./server %s' % action)

现在,当我尝试通过结构启动服务器时,它会打印starting,因此 shell 脚本正在执行并到达if块,但我仍然无法通过结构启动服务器。

但是如果我 ssh 到服务器并执行sudo ./server start,gunicorn 就会启动。

有人可以解释我做错了什么吗?

4

2 回答 2

3

它很可能与这两个常见问题解答点有关:

http://www.fabfile.org/faq.html#init-scripts-don-t-work

http://www.fabfile.org/faq.html#why-can-ti-run-programs-in-the-background-with-it-makes-fabric-hang

于 2013-08-01T05:58:54.773 回答
1

尝试使用以下方法全局设置 pty False:

from fabric.api import env

env.always_use_pty = False

或使用以下命令为该命令设置 pty False:

run('run unicorn command etc...' pty=False)

请参阅以下中的初始化脚本部分:

http://www.fabfile.org/faq.html#init-scripts-don-t-work

于 2017-06-26T05:22:33.553 回答