Flask+Supervisor安装实现后台进程常驻
本次主要尝试云主机运行Flask+Supervisor后台运行
之前flask demo的运行,只能在在任务开启时运行。为了能够长期在后台运行,
必须采用Supervisor在开关机加载并维护进程才能保证本地关机网页依然能够打开。
步骤如下:
- 打开建立的flask环境,新建requirements.txt列出全部的flask组件
pip install -r requirements.txt 以下为内容
Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Moment==0.4.0
Flask-PageDown==0.1.5
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Flask-WTF==0.10.2
Flask-Cache==0.13.1
Flask-Restless==0.15.0
Flask-Uploads==0.1.3
Jinja2==2.7.3
Mako==1.0.0
Markdown==2.5.1
MarkupSafe==0.23
SQLAlchemy==0.9.8
WTForms==2.0.1
Werkzeug==0.9.6
html5lib==1.0b3
itsdangerous==0.24
six==1.8.0
awesome-slugify==1.6
-
装 uwsgi / gunicorn
pip install uwsgi
pip install gunicorn -
退回到Flask项目目录下建立uwsgi.ini(这是为了使用uwsgi的,但是gunicorn更简单貌似)
[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 0.0.0.0:5000
# 外网访问端口,如果直接用uWSGI外网,这里由于使用了Nginx,故注释掉
# http= :80
# 指向网站目录
chdir = /root/projects/flask_car/
# python 启动程序文件
wsgi-file = server.py
# python 程序内用以启动的 application 变量名
# app 是 manage.py 程序文件内的一个变量,这个变量的类型是 Flask的 application 类
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 0.0.0.0:9191
daemonize=/var/log/uwsgi.log
-
运行命令安装配置
uwsgi config.ini
-
安装 Supervisor
supervisor就是作为一种进程守护,来监听web服务,一旦web挂掉,supervisor会让其自启。确保web服务器不会处于挂掉状态
(1) 退出环境deactivate
(2)安装扩展仓库sudo yum install -y epel-release
(3)安装yum install -y supervisor
(4)检查安装的位置rpm -ql supervisor
(5)找到/etc/superisord.conf
(6)修改这个文件vim superisord.conf
mkdir /etc/supervisor
(7)通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
(8)打开/etc/supervisor/supervisord.conf最后一行可以看到
就是这个目录下的ini都会加载,那就在/etc/supervisor.d下面增加一个
;[include]
;files = relative/directory/*.ini
# 增加如下
[include]
files = conf.d/*.conf
(9)增加一个配置文件flask_car.conf到conf.d目录下
[program:flask_car]
# 启动命令入口
# command=flask/bin/uwsgi ./uwsgi.ini
command=flask/bin/gunicorn -w 4 -b 0.0.0.0:5000 server:app
# command=flask/bin/python3 ./server.py
# 命令程序所在目录
directory=/root/projects/flask_car/
#运行命令的用户名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/root/projects/flask_car/logs/uwsgi_supervisor.log
priority=1
killasgroup=true
stopasgroup=true
(10)启动supervisor
supervisord -c /etc/supervisor/supervisord.conf
(11)查看启动情况
ps -ef | grep supervisord
(12)如果已经启动相关进程则杀掉再启动
kill -s SIGTERM 31333 杀掉第一个进程 这里可以看到启动情况
(13)配置Supervisor开机启动
新建(如果存在就改写)/usr/lib/systemd/system/supervisord.service
```
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
```
(14) 开启并验证是否正确开启
-执行命令
systemctl enable supervisord
-或重载
systemctl daemon-reload
-验证命令
systemctl is-enabled supervisord