Tornado Python作为守护进程

时间:2013-09-17 05:33:23

标签: python linux nginx tornado daemon

我的代码是用龙卷风编写的,我希望它的工作方式与apache或nginx非常相似,即

  1. 即使关闭shell,它也必须继续收听端口。
  2. 必须在系统重启时自动启动
  3. 即使关闭shell,我也尝试过nohup命令使其工作。有用。但我想知道是否有更清洁的选择?

3 个答案:

答案 0 :(得分:7)

取自官方文件here

概述

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

开发

启用debug mode后,模板不会被缓存,应用程序会在开发过程中自动重启。但是,如果发生Python语法错误,这将失败。 (这可以解决w /某些additional code或在开发中使用Supervisor

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

仪表

生产

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

流程管理

传统上,Tornado应用程序是单进程的,需要外部进程管理器,但HTTPServer can be run with multiple processes。此外,还有一些additional helpers用于帮助管理多个流程。

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

如上所述,Tornado的HTTPServer can be configured用于单个或多个套接字上的多个进程。

代理功能

官方文档包含example for running nginx作为负载平衡代理和服务静态文件。

部署

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

创建一个新文件为" my_tornado_app.service" on" / etc / systemd / system /"

和内容

[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

工作!