我有一个基于 flask+tornado 组合的 Web 服务器。它在虚拟环境中运行(使用 python virtualenv 设置)。
我希望服务器在普通用户启动时自动启动。我为实现此目标做了以下工作:
1)我编写了一个启动脚本,内容如下:
cd /home/ubuntu/myserver
# enter virtualenv
source venv/bin/activate
# launch
python app.py > serverlog.log 2&>1 &
2)我已经设置了一个crontab,如下crontab -e
所示:
SHELL=/bin/bash
@reboot /home/ubuntu/start_service.sh
当我从命令行执行启动脚本时,一切都正确启动。但重新启动后,serverlog.log
我看到一个堆栈跟踪,提示绑定到端口 5000 失败。我该怎么做才能修复它?
答案1
Crontab 不够智能,无法保持服务器正常运行。当服务器宕机时,它必须等待 crontab 再次运行;您的客户端会从故障服务器收到 404 错误。
我建议你使用类似的东西导师。你可以使用 easy_install 安装它,例如
easy_install supervisor
你需要处理 Supervisord 和 Supervisorctl。第一个是守护进程管理器,它将运行并确保你的
python app.py > serverlog.log 2&>1 &
无论如何都要继续运行。您可以通过在supervisord.conf上创建一个所谓的程序来实现这一点,例如
[program:flasktornado]
command=python app.py > serverlog.log 2&>1 &
Supervisorctl 是你如何在supervisord配置文件上控制[启动|停止|重新启动]你刚刚创建的程序。这可能会对你有帮助。