原文地址?https://www.cyberlight.xyz/passage/supervisor-flask
上篇筆記CentOS下通過(guò)Gunicorn+Nginx部署Python Flask網(wǎng)站,并配置https和Nginx訪客日志實(shí)現(xiàn)了Gunicorn部署Flask網(wǎng)站,采用新建 獨(dú)立命令窗口 的形式實(shí)現(xiàn)Gunicorn后臺(tái)運(yùn)行。然而,實(shí)際生產(chǎn)環(huán)境中,我們可能需要Gunicorn 隨服務(wù)器開(kāi)機(jī)自啟或?系統(tǒng)出錯(cuò)時(shí)及時(shí)重啟。下面記錄我部署Supervisor的全過(guò)程。
這篇筆記建立于CentOS下通過(guò)Gunicorn+Nginx部署Python Flask網(wǎng)站,并配置https和Nginx訪客日志實(shí)現(xiàn)后的優(yōu)化,若您暫沒(méi)有實(shí)現(xiàn)Gunicorn部署上線,請(qǐng)先閱讀它。
環(huán)境:?CentOS 7,? Python 3.6.8
進(jìn)入CentOS命令窗口,輸入如下命令安裝Supervisor
yum install supervisor
按提示操作,安裝完成后,默認(rèn)位置為?/etc/supervisord.conf 。我們需要在 /etc/supervisord.d?目錄新建一個(gè) ini 配置文件。這里使用 vi 命令新建文件,如下
vi /etc/supervisord.d/xxx.ini#xxx為自定義名稱(chēng)
按下鍵盤(pán) i?進(jìn)入編輯頁(yè)面,輸入如下信息(SSH客戶端窗口按 Shift + Insert鍵 粘貼)
[program:xxx]; :右邊是項(xiàng)目名稱(chēng)directory =/www/flask/xxx ;程序的啟動(dòng)目錄,這里是Flask網(wǎng)站根目錄command =/www/flask/xxx/venv/bin/gunicorn -w4-t30-b0.0.0.0:5000app:app ;啟動(dòng)虛擬環(huán)境下的gunicorn,這里建議使用絕對(duì)路徑autostart =true; 在 supervisord 啟動(dòng)的時(shí)候也自動(dòng)啟動(dòng)autorestart =true;程序異常退出后自動(dòng)重啟stdout_logfile =/supervisor_log/supervisor.log ;日志存放路徑,這個(gè)路徑需要是已存在的路徑startsecs =5; 啟動(dòng)5秒后沒(méi)有異常退出,就當(dāng)作已經(jīng)正常啟動(dòng)了stopwaitsecs=0; 停止等待時(shí)間
上述信息中
?; 是注釋符?
command行?/www/flask/xxx/venv/bin/gunicorn?是該項(xiàng)目虛擬環(huán)境中Gunicorn的絕對(duì)路徑,請(qǐng)根據(jù)實(shí)際路徑不同靈活調(diào)整(Gunicorn的命令見(jiàn)筆記首部鏈接的文章)
輸入正確信息后,依次按下鍵盤(pán) esc 鍵、: 鍵、w 鍵、q 鍵,然后回車(chē)(保存并退出)
此時(shí)已成功安裝并配置Supervisor,Supervisor貌似是自動(dòng)啟動(dòng)的,在命令窗口輸入
supervisorctl reload#保存配置文件并重啟
如圖,Supervisor已重啟

繼續(xù)輸入
supervisorctl
這時(shí)能看到? ? XXX? ? ? ? ? ? ? ? ? ? ? ?RUNNING? ?字段,代表網(wǎng)站已啟動(dòng)
現(xiàn)在試試重啟服務(wù)器吧!網(wǎng)站將自動(dòng)啟動(dòng)。
若更新了Flask源碼,輸入?supervisorctl reload?即可重啟新代碼
Supervisor常用命令如下:
#關(guān)閉所有任務(wù)
supervisorctl shutdown
# 啟動(dòng)某個(gè)進(jìn)程
supervisorctl start programxxx
# 重啟某個(gè)進(jìn)程
supervisorctl restart programxxx
# 停止全部進(jìn)程 注:start、restart、stop都不會(huì)載入最新的配置文件
supervisorctl stop all
# 載入最新的配置文件,停止原有進(jìn)程并按新的配置啟動(dòng)、管理所有進(jìn)程。
supervisorctl reload
# 根據(jù)最新的配置文件,啟動(dòng)新配置或有改動(dòng)的進(jìn)程,配置沒(méi)有改動(dòng)的進(jìn)程不會(huì)受影響而重啟。
supervisorctl update