flask + supervisor + gunicorn


supervisor 分為 客戶端和服務端, 這里記錄使用supervisor管理gunicorn測試機ubuntu16.04 + python3.6 

supuervisor 屬於系統級別的直接安裝在 虛擬環境之外就可以

主要實現的是在虛擬環境中基於 Flask 框架 搭建一個web 應用,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理進程, 這里我主要記錄Supervisor  進行進程管理

1 安裝

pip install supervisor

2 生成默認的配置文件 建議放在自建配置目

cd /etc
mkdir supervisor
cd supervisor
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默認配置文件

3 修改配置文件  啟動一定指定配置文件絕對路徑

vim supervisor.conf  # 修改 supervisor 配置文件,添加 gunicorn 進程管理

在 supervisor.conf 配置文件底部添加 

[program:myapp]   進程管理名稱隨便擬定 有時候和項目啟動腳本重復時 會出現Bug
command=/home/myproject/venv/bin/gunicorn -w4 -b0.0.0.0:8080 app:app   ; supervisor啟動命令
directory=/home/myproject                                                ; 項目的文件夾路徑
startsecs=0                                                               ; 啟動時間
stopwaitsecs=0                                                            ; 終止等待時間
autostart=false                                                           ; 是否自動啟動
autorestart=false                                                         ; 是否自動重啟
stdout_logfile=/home/myproject/log/gunicorn.log             ; log 日志
stderr_logfile=/home/myproject/log/gunicorn.err             ; 錯誤日志

4 配置 web 管理界面

supervisor 還有一個 web 的管理界面,可以激活。更改下配置 客戶端 (ctl 表示客戶端  **d 表示服務端)
[inet_http_server]     ; inet (TCP) server disabled by default
port=127.0.0.1:9001    ; (ip_address:port specifier, *:port for alliface)
username=wang          ; (default is no username (open server)  登錄客戶端的賬號
password=123           ; (default is no password (open server)) 登錄客戶端的密碼 隨便擬定  服務端與下面客戶端配置必須一致

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://127.0.0.1:9001       ; use an http:// url to specify an inet socket
username=wang                         ; should be same as http_username if set
password=123                          ; should be same as http_password if set
;prompt=mysupervisor                  ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history           ; use readline history if available

5 啟動服務

supervisord -c /etc/supervisor/supervisord.conf  啟動 同時啟動的客戶端和服務端
進入客戶端
supervisorctl -c /etc/supervisor/supervisord.conf
1 基本操作 help
status                    察看supervisor的狀態
reload                    重新載入 配置文件
start [all]|[appname]     啟動指定/所有 supervisor管理的程序進程
stop [all]|[appname]      關閉指定/所有 supervisor管理的程序進程
2 直接操作                          
supervisorctl -c /etc/supervisor/supervisord.conf status     察看supervisor的狀態
supervisorctl -c /etc/supervisor/supervisord.conf reload      重新載入 配置文件
supervisorctl -c /etc/supervisor/supervisord.conf start [all]|[appname]     啟動指定/所有 supervisor管理的程序進程
supervisorctl -c supervisor.conf stop [all]|[appname]      關閉指定/所有 supervisor管理的程序進程      

注意事項:

1. 先確認[program:XXX]中自己的程序的command=<啟動命令>和 directory=<運行命令的路徑>沒有問題,python是不是用的自己要的環境的python(比如虛擬環境的),log文件的文件夾是不是已經創建(沒創建的話supervisor沒權限生成log文件),以及改log文件是不是授權給所有用戶了(可參考前面的解決辦法chmod +x aaaaa.log) 
2. 確保用上面的配置中的command在指定路徑可以直接運行不會報錯,這時候一般就不會有什么問題了。這時候tail你自己的log文件一般就能看到log信息,啟動失敗報錯的信息也會在你的log文件中,照着解決后supervisorctl reload就好了。 
3. 如果上面的命令確保可以跑,但還是沒法正常運行,也看不到自己程序的報錯(不然你就能根據報錯解決問題了),那么恭喜,你遇到了跟我一樣的情況。我的解決辦法很詭異,嘗試把[program:XXX]中的名字換成了一個跟啟動命令不一樣的另一個名字(不要太短),reload之后居然就可以跑了

 參考:

https://www.jianshu.com/p/be9dd421fb8d

https://blog.csdn.net/kkevinyang/article/details/80539940

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM