【发布时间】:2011-06-13 22:22:57
【问题描述】:
我有一个使用 Flask 用 Python 编写的小应用程序。现在我在 nohup 下运行它,但我想守护它。这样做的正确方法是什么?
【问题讨论】:
我有一个使用 Flask 用 Python 编写的小应用程序。现在我在 nohup 下运行它,但我想守护它。这样做的正确方法是什么?
【问题讨论】:
There are several ways to deploy a Flask project。使用gunicorn 部署可能是最简单的,安装 gunicorn 然后:
gunicorn project:app --daemon
尽管您可能想使用主管或类似的东西来监控 gunicorn(至少使用 --pid 以便您可以轻松地重新加载/停止 gunicorn)。
【讨论】:
如果您已经安装了主管,我认为 gunicorn 会有点多余。下面是一个flask.ini文件,可以放到/etc/supervisord.d/中(然后“supervisorctl reload”重新加载配置并启动进程)。
command=/opt/flask/env0/bin/python /opt/flask/developer/FlaskWebServer.py
directory=/opt/flask
redirect_stderr=true
startsecs=5
autorestart=true
stdout_logfile=/opt/flask/flask.stdout.log
【讨论】:
我是一个正在运行的 centos,systemd 为我的所有其他服务工作。 所以我在我的烧瓶应用程序中使用了相同的方法
使用我的所有 Flask 设置创建一个脚本 sh
#!/bin/bash
# flask settings
export FLASK_APP=/some_path/my_flask_app.py
export FLASK_DEBUG=0
flask run --host=0.0.0.0 --port=80
将此脚本设为可执行文件
chmod +x path/of/my/script.sh
添加一个systemd服务来调用这个脚本
/etc/systemd/system/
vim flask.service
[Unit]
Description = flask python command to do useful stuff
[Service]
ExecStart = path/of/my/script.sh
[Install]
WantedBy = multi-user.target
要完成,请在启动时启用它
systemctl 启用 flask.service
关于 systemd 的更多信息:https://www.tecmint.com/create-new-service-units-in-systemd/
【讨论】:
如果您想监督它并在重新启动后保持它的持久性,您可以使用immortal
你可以这样称呼它:
immortal -l /var/log/your-app gunicorn project:app
或通过run.yml,例如:
cmd: gunicorn project:app
cwd: /path/of/project
env:
DEBUG: 1
ENVIRONMENT: production
log:
file: /var/log/app.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
timestamp: true # will add timesamp to log
stderr:
file: /var/log/app-error.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
timestamp: true # will add timesamp to log
user: www
更多关于不朽:https://immortal.run/about/
【讨论】: