CentOS下通過(guò)Supervisor管理虛擬環(huán)境的Gunicorn Flask項(xiàng)目,實(shí)現(xiàn)開(kāi)機(jī)自啟等功能

原文地址?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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容