2

我的代码是用 tornado 编写的,我想让它像 apache 或 nginx 一样工作,那就是

  1. 即使我关闭外壳,它也必须继续监听端口。
  2. 它必须在系统重新启动时自动启动

即使关闭 shell,我也尝试过 nohup 命令使其工作。有用。但我想知道是否有更清洁的选项可用?

4

3 回答 3

7

取自此处的官方文档。

概述

大多数 Tornado 应用程序都作为单个进程运行。对于生产,这通常意味着外部流程管理和代理的相当直接的组合。以下是一些收集的最佳实践/资源。

发展

启用调试模式后,模板不会被缓存,应用程序将在开发过程中自动重启。但是,如果发生 Python 语法错误,这将失败。(这可以通过一些额外的代码或在开发中使用Supervisor来解决)

您可能希望从screentmux等终端多路复用器运行您的应用程序,以便更灵活地保持运行和跟踪致命错误。

仪器仪表

生产

通常在生产中,使用前端代理运行多个 tornado 应用程序进程(每个核心至少一个)。Tornado 开发人员 bdarnell 有一个tornado-production-skeleton使用Supervisor(进程管理)和nginx(代理)来说明这一点。

流程管理

传统上,Tornado 应用程序是单进程的,需要外部进程管理器,但是HTTPServer 可以与多个进程一起运行。此外,还有几个额外的助手可以帮助管理多个进程。

导师 守护进程
  • start-stop-daemon 示例- 如果您正在运行标准 Linux 系统,这是一种守护 Tornado 应用程序的简单方法
  • Upstart 示例- Upstart 内置在 Ubuntu 中,可以重新生成崩溃的实例。
龙卷风多进程

如上所述,Tornado 的HTTPServer 可以为单个或多个套接字上的多个进程配置。

代理

官方文档包含一个将nginx作为负载平衡代理运行和提供静态文件的示例。

部署

于 2014-11-21T09:31:33.747 回答
3

我正在使用 Python 3,supervisord 目前不支持 python3。我的解决方案是原生的

在“/etc/systemd/system/”上创建一个新文件为“my_tornado_app.service”

和内容

[Unit]
Description=MyTornadoApp1.0
[Service]
ExecStart=/usr/bin/python3 /var/vhosts/mytornado-app/app.py
User=www-data
Restart=on-failure
[Install]
WantedBy=multi-user.target

现在:

sudo systemctl daemon-reload
sudo systemctl enable my_tornado_app.service.service
sudo systemctl start my_tornado_app.service.service

和工作!

于 2017-10-26T14:13:57.330 回答
2

简而言之:使用supervisord和/或nginx.

查看此链接:http ://blog.thisisfeifan.com/2012/06/deploy-tornado-application.html

于 2013-09-18T19:50:34.283 回答