【问题标题】:Supervisord, Flask, Tornado (exit status 1; not expected)Supervisord、Flask、Tornado(退出状态 1;未预期)
【发布时间】:2014-03-28 14:30:30
【问题描述】:

在让主管运行我的龙卷风应用时遇到一些问题。

我有一个用 Flask 构建的 REST API,使用 Tornado 来尝试服务它。我遇到的问题是,当我尝试与主管一起运行时,导入其他支持的 python 包似乎失败。

inf_api 是烧瓶 API。

这是龙卷风的脚本

from influence_api import app
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options

define("port", default=8080, help="Port to listen on", type=int)

if __name__ == '__main__':
    options.parse_command_line()
    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(options.port)
    IOLoop.instance().start()

supervisord.conf 的程序部分(我已经尝试过几次迭代)

[program:tornado-8080]
autostart=true
autorestart=true
environment=USER=root,PYTHONPATH=/usr/bin/
command=python /media/sf_Projects/inf_api/inf_api/inf_server_nginx.py
stderr_logfile = /var/log/supervisord/tornado-stderr.log
stdout_logfile = /var/log/supervisord/tornado-stdout.log

我尝试过在环境中放置了多少以及直接在命令中放置了多少。包括变体......

user=root
autostart=true
autorestart=true
exitcodes=0,1,2
command=env PATH="/usr/bin/python" /media/sf_Projects/inf_api/inf_api/inf_server_nginx.py --port=8081
command=/usr/bin/python /media/sf_Projects/inf_api/inf_api/inf_nginx.py --port=8081
stderr_logfile = /var/log/supervisord/tornado-stderr.log
stdout_logfile = /var/log/supervisord/tornado-stdout.log

来自主管的错误输出

2014-02-25 16:55:24,917 INFO spawned: 'tornado-8080' with pid 3527
2014-02-25 16:55:25,156 DEBG 'tornado-8080' stderr output:
Traceback (most recent call last):
  File "/media/sf_Projects/inf_api/inf_api/inf_server_nginx.py", line 11, in <module>

2014-02-25 16:55:25,157 DEBG 'tornado-8080' stderr output:
    from inf_api import app

2014-02-25 16:55:25,157 DEBG 'tornado-8080' stderr output:
  File "/media/sf_Projects/inf_api/inf_api/inf_api.py", line 159, in <module>

2014-02-25 16:55:25,158 DEBG 'tornado-8080' stderr output:
    mongo_ip = read_config('Database')['mongoip']

2014-02-25 16:55:25,158 DEBG 'tornado-8080' stderr output:
  File "/media/sf_Projects/inf_api/inf_api/inf_api.py", line 114, in read_config

2014-02-25 16:55:25,158 DEBG 'tornado-8080' stderr output:
    options = config.options(section)

2014-02-25 16:55:25,159 DEBG 'tornado-8080' stderr output:
  File "/usr/lib/python2.7/ConfigParser.py", line 279, in options
    raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'Database'
.........
2014-02-25 20:29:26,924 INFO exited: tornado-8080 (exit status 1; not expected)

在使用或不使用 SSL 的情况下按原样运行 Tornado 都可以正常工作,就像 Flask API 独立运行一样。使用 sudo 运行 supervisord 而没有......

如您所见,我很困惑 - 有什么想法吗?

【问题讨论】:

    标签: python python-2.7 flask tornado supervisord


    【解决方案1】:

    您可能正在查看配置文件的错误目录。

    设置directory 运行supervisord。

    directory=/media/sf_Projects/inf_api/
    

    我不确定这是否是您想要的目录,但这是要走的路。

    【讨论】:

    • 我试试看。我使用 -n 选项运行 supervisord,当我对配置文件进行更改(如注释掉其他 3 个程序)时,更改会更新。 supervisord.conf 在 /etc/
    • 更新 - 没有变化
    【解决方案2】:

    我想我把它整理出来了。确保我使用的目录中的所有 python 文件都是可执行的

    chmod +x <FILES>
    

    修改了 supervisord 文件的 Program 部分,如下所示

    [program:inf_svr]
    process_name=inf_svr%(process_num)s
    directory=/media/sf_Projects/inf_api/inf_api/
    environment=USER=root,PYTHONPATH=/usr/bin/
    command=python /media/sf_Projects/inf_api/inf_api/inf_server_nginx.py
    startsecs=2
    user=root
    autostart=true
    autorestart=true
    numprocs=1
    numprocs_start=8080
    stderr_logfile = /var/log/supervisord/tornado-stderr.log
    stdout_logfile = /var/log/supervisord/tornado-stdout.log
    

    tornado 应用程序启动时没有错误并提供 api。到 nginx 上.....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 2015-05-10
      • 2018-06-24
      • 2018-05-01
      • 2019-11-25
      • 1970-01-01
      • 2019-06-19
      • 2010-12-22
      相关资源
      最近更新 更多