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進程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章