6、Django+Uwsgi+Nginx的生产环境部署---用supervisor管理uwsgi进程

所使用的操作系统与环境

操作系统:centos6.5

Python环境:3.7.0

本文前提

  • uwsgi+nginx部署Django项目已经完成,并能在浏览器中访问

本文的目的

用supervisor管理uwsgi进程,当uwsgi进程因为某种原因挂掉的时候进行重启

下载并安装

从如下地址中下载得到.whl包,在本地使用pip install安装

https://pypi.org/project/supervisor/#files

为了方便全局使用还需要链接到/usr/bin下

sudo ln -s /home/zeng/anaconda3/bin/supervisor /usr/bin/supervisor
sudo ln -s /home/zeng/anaconda3/bin/supervisord /usr/bin/supervisord
sudo ln -s /home/zeng/anaconda3/bin/supervisorctl /usr/bin/supervisorctl

使用supervisor来启动项目

配置supervisor

先创建log文件夹

mkdir log

修改之前的uwsgi文件,去掉daemonize(已经不需要这个了)
> [外链图片转存失败(img-Zrs42rV0-1565491798139)(2EEF03AFBF82438A9C8890478F420F82)]

在django项目中新建一个supervisor的配置文件spider_supervisor.conf,填入如下内容(根据程序做一些修改)

# supervisor的程序名字
[program:spider]
# supervisor执行的命令
command=uwsgi --ini spider_uwsgi.ini
# 项目的目录
directory = /home/zeng/cnr/spider
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0  
# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=/home/zeng/cnr/spider/log/supervisord.log
# 输出的错误文件
stderr_logfile=/home/zeng/cnr/spider/log/supervisord.err

[supervisord]
# log的级别
loglevel=info

# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001

# 登录supervisorctl的用户名和密码
username = zengraoli
password = 123456

[inet_http_server]
# supervisor的服务器
port = :9001
# 用户名和密码
username = zengraoli
password = 123456

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

> [外链图片转存失败(img-XhmQaFlB-1565491798139)(1A08E10F79C34DE1BDBC98478E9FBE86)]

启动supervisor和关闭supervisor

如果之前启动了uwsgi,那么首先kill掉
> [外链图片转存失败(img-Ei6GckRf-1565491798140)(5421C99F906546B7AB1568D0F3B62D53)]

使用命令启动supervisor

supervisord -c spider_supervisor.conf

supervisord启动的进程依然可以使用kill杀掉
> [外链图片转存失败(img-6GGWPJux-1565491798140)(6FFDAAC182C94D59A3119CB943B27EA0)]

其他的一些操作

使用命令进入管理控制台

supervisorctl -c spider_supervisor.conf

在控制台中使用命令stop、start分别启动和停止项目spider
> [外链图片转存失败(img-Gfc7RHYb-1565491798140)(0CD3825A93614859AC01A894AB526FA9)]

当然还可以通过浏览器进入(端口、用户名和密码均在配置文件中)
> [外链图片转存失败(img-oCDKaM7u-1565491798140)(4D4B1107E93043A0AE7AA7F34D81ABFE)]

杀掉uwsgi进程看看效果

> [外链图片转存失败(img-XPIeJWYb-1565491798140)(DB9FD2E9BDE04C8591BC27B34AAEE114)]

只要supervisord进程还存在,uwsgi就会重启

那正确的停止流程应该是

  • 1、supervisorctl中stop对应的项目,比如supervisorctl中stop spider
  • 2、kill掉剩下的uwsgi进程
  • 3、kill掉的supervisord进程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章