我的代码是用 tornado 编写的,我想让它像 apache 或 nginx 一样工作,那就是
- 即使我关闭外壳,它也必须继续监听端口。
- 它必须在系统重新启动时自动启动
即使关闭 shell,我也尝试过 nohup 命令使其工作。有用。但我想知道是否有更清洁的选项可用?
取自此处的官方文档。
大多数 Tornado 应用程序都作为单个进程运行。对于生产,这通常意味着外部流程管理和代理的相当直接的组合。以下是一些收集的最佳实践/资源。
启用调试模式后,模板不会被缓存,应用程序将在开发过程中自动重启。但是,如果发生 Python 语法错误,这将失败。(这可以通过一些额外的代码或在开发中使用Supervisor来解决)
您可能希望从screen或tmux等终端多路复用器运行您的应用程序,以便更灵活地保持运行和跟踪致命错误。
通常在生产中,使用前端代理运行多个 tornado 应用程序进程(每个核心至少一个)。Tornado 开发人员 bdarnell 有一个tornado-production-skeleton使用Supervisor(进程管理)和nginx(代理)来说明这一点。
传统上,Tornado 应用程序是单进程的,需要外部进程管理器,但是HTTPServer 可以与多个进程一起运行。此外,还有几个额外的助手可以帮助管理多个进程。
导师如上所述,Tornado 的HTTPServer 可以为单个或多个套接字上的多个进程配置。
官方文档包含一个将nginx作为负载平衡代理运行和提供静态文件的示例。
我正在使用 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
和工作!
简而言之:使用supervisord
和/或nginx
.
查看此链接:http ://blog.thisisfeifan.com/2012/06/deploy-tornado-application.html