Назад | Перейти на главную страницу

Supervisord, Flask, Tornado (статус выхода 1; не ожидается)

Возникли некоторые проблемы с получением супервизора запуска моих приложений торнадо.

У меня есть REST API, созданный с помощью Flask, с использованием 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)

Запуск Tornado как есть с SSL или без него работает нормально, как и Flask API отдельно. Запускал supervisord с sudo и без ....

Как видите, я в тупике - Есть идеи?

Думаю, я разобрался: убедился, что все файлы python в каталоге, который я использовал, были исполняемыми

chmod +x <FILES>

Изменена программная часть файла супервизора, чтобы она выглядела следующим образом

[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