Python
Supervisord、Flask、Tornado(退出狀態 1;未預期)
在讓主管執行我的龍捲風應用程序時遇到一些問題。
我有一個用 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 執行監督,但不使用….
如您所見,我很困惑-有什麼想法嗎?
認為我把它整理出來了:確保我使用的目錄中的所有 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