supervisor + gunicorn 的坑

在嘗試使用supervisor 來守護 gunicorn啓動的web服務時,遇到了一個小坑,但是這個小坑卻耽誤了不少時間!

建議:

安裝有3中方式:

1.系統安裝,這樣安裝的是系統全局的,系統會使用python2來運行,所以棄用這個方式。

2. 全局pip, 使用pip3 install supervisor 可以安裝,但是安裝後需要進入到很深的全局包的目錄才能運行,如 /usr/local/python3.xxx/xxx/xxx/。 比較繁瑣 

3. 虛擬環境,在虛擬環境下使用pip install supervisor, 這樣也需要使用絕對路徑來運行,如 /home/xxx/code/venv/bin/supervisord

選擇哪種看自己的使用習慣吧

配置

 建議將配置生成到supervisor默認使用的目錄去, /etc/supervisor/

 使用 echo_supervisor_confi > /etc/supervisor/supervisord.conf

 然後在最後加上:

 [include]

  files = conf.d/*.conf

  再創建 conf.d 目錄並在其下創建自己的自定義文件進行配置,這裏就不貼配置了。

坑:

1. 由於supervisor監控的程序不能是daemon,但是之前gunicorn裏面設置成了daemon, 所以導致supervisor認爲剛啓動的程序意外退出,然後便嘗試重啓,過了幾次之後還是同樣的結果就報錯了,但實際上gunicorn的服務已經在運行了。將gunicorn配置的daemon改爲非daemon就行了。

2. 由於gunicorn我是在虛擬環境下安裝的,並且由於項目發佈的方式是通過包的方式發佈的,所以使用gunicorn來啓動項目的時候很依賴虛擬環境,而在supervisor裏面也暫時沒想到有什麼辦法可以先激活虛擬環境然後在運行,所以就使用了一個bash腳本來激活虛擬環境並運行,然後通過supervisor 來運行bash腳本。 這樣做的好處: 方便, 可以方便地通過設置環境變量來控制項目的運行。

 

常用命令:

1. 啓動 supervisord -c /etc/supervisor/supervisor.conf

2. 停止 supervisorctl shutdown

3. 查看log, 先查看 /etc/supervisor/supervisor.conf 中[supervisord]段的log路徑,我的是在/tmp裏面,查看log可以快速定位到錯誤。

發佈了19 篇原創文章 · 獲贊 0 · 訪問量 3510
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章