如何将Flask应用程序转为守护进程?

32 投票
4 回答
35121 浏览
提问于 2025-04-16 19:30

我有一个用Python和Flask写的小应用程序。现在我是在nohup的环境下运行它,但我想把它变成一个守护进程。请问怎么做才是正确的呢?

4 个回答

2

如果你已经安装了supervisor,那么gunicorn就有点多余了。下面是一个可以放在 /etc/supervisord.d/ 里的 flask.ini 文件(然后运行 "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
7

我在用CentOS系统,系统里有systemd在管理我的其他服务。于是我也用它来管理我的Flask应用。

首先,我创建了一个.sh脚本,里面写了我Flask应用的所有设置。

#!/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 enable flask.service

想了解更多关于systemd的信息,可以查看这个链接: https://www.tecmint.com/create-new-service-units-in-systemd/

37

有几种方法可以部署一个Flask项目。使用gunicorn可能是最简单的方式,先安装gunicorn,然后:

gunicorn project:app --daemon

不过,你可能想用一些工具,比如supervisor,来监控gunicorn(至少要使用--pid选项,这样你可以方便地重新加载或停止gunicorn)。

撰写回答