2015年11月27日

Tornado 教學 (11) - 使用 Supervisor #1 ( Use Supervisor for Tornado Web Application #1 )

若有繼續深入 Tornado Web Framework 相關使用,可以發現許多人都推薦利用 Python 所寫的 Supervisor 來管理 Tornado Application。因此,本篇將紀錄如何設定、使用 Supervisor。( 其他 Tornado 相關教學可以參考本篇整理 )



安裝 Supervisor:
Supervisor 是一個讓使用者於 UNIX-like 作業系統上管理 Processes 的軟體,其運作原理請參考文件。以我的暸解,Supervisor 主要由 supervisordsupervisorctl 組成,前一個負責 Processes 啟動、管理,後面一個則是讓你可以針對每個 Process 下達命令的工具。Supervisor 安裝方式有很多種,接下來將使用 pip 來安裝,指令如下:
pip install supervisor


建立 Supervisor 設定檔:
安裝完畢後,接著來建立設定檔。Supervisor 有提供一個指令,可以快速產生設定檔,指令如下:
echo_supervisord_conf > /etc/supervisord.conf
但是自動產生的設定檔內容太繁雜,所以我們先來手動建立一個簡單設定檔。注意,設定檔內可以同時加入多個應用,但本範例僅以單個應用為主,內容如下:
; group 區塊
; 此區塊內指定哪些程序屬於同一個群組,
; 範例內指定了一個群組(app),它目前擁有一個成員(app1)
[group:app]
programs=app1

; program 區塊
; 此區塊內必須詳細的定義執行程式名稱、路徑及 Log 存放路徑
[program:app1]
command=python /your/path/test.py -port=8888 -ip=yourip
directory=/your/path
autorestart=true
redirect_stderr=true
loglevel=info
stdout_logfile=/your/path/app1.log

; inet_http_server 區塊
; Supervisor 提供網頁管理介面,從瀏覽器中就可以直接操控
[inet_http_server]
port=127.0.0.1:9001

[supervisord]

[supervisorctl]
serverurl=http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
注意,rpciterface 區塊若沒有如上面範例加入設定檔中,會出現錯誤訊息:Sorry, supervisord responded but did not recognize the supervisor namespace commands that supervisorctl uses to control it. Please check that the [rpcinterface:supervisor] section is enabled in the configuration file (see sample.conf).

基本上錯誤訊息都會直接告訴你缺少哪一個設定區塊,依指示補上即可。若沒有其他設定上的意外,基本的 Supervisor 設定就完成了,接下來只需將它啟動。


使用 Supervisor:
下面直接列出常用的指令:
# 啟動 supervisord,並指定設定檔
supervisord -c /etc/supervisord.conf

# 查看 Process 狀態
supervisorctl status

# 重新載入設定
supervisorctl reload

# 重新啟動
supervisorctl restart

# 停止特定 Process
# 延續設定檔範例,若要停止群組 app 內的 app1
supervisorctl stop app:app1

# 停止所有 Prcoess
supervisorctl stop all


Environment :
  ・ Mac OS X
  ・ Python 2.7

Reference :
  ・ Tornado
  ・ Supervisor


熱門文章