【Python】supervisor 工具介紹
一 簡介
是一款基於Python的程式管理工具,可以很方便的管理伺服器上部署的應用程式。supervisor是C/S模型的程式,其server端是supervisord 服務,client 端是supervisorctl 命令 。
Supervisor的功能如下:
1 啟動、重啟、關閉包括但不限於python程式。
2 檢視程式的執行狀態。
3 批次維護多個程式。
思考一下當應用伺服器要部署多個服務程式,機器關閉,重啟,如何批次維護?此時supervisor是一個不錯的選擇。可以用 supervisor 同時啟動所有應用程式而不用逐個啟動。
二 如何安裝配置
2.1 安裝步驟請移步 本文主要介紹如何配置和常用的命令
2.2 supervisor的配置
supervisor啟動的時候如果沒有加上-c引數,則會使用預設的配置檔案啟動,supervisor會按照如下順序去尋找預設配置檔案:
$CWD表示當前的工作目錄,上面三個路徑從上到下優先順序遞減,也就是說supervosir會優先去檢查$CWD/supervisord.conf檔案是否存在,存在就使用該檔案啟動supervisor,否則向下繼續檢查。
當然我們也可以使用如下命令生成配置檔案:
配置檔案內如參考如下
我們把檔案內容分成兩塊
1 supervisord自身的配置項內容
2 需要管理的應用程程式的配置,在[include]裡面
2.3 應用程式的cnf檔案配置資訊
應用程式的配置檔案格式
應用程式的配置檔案格式需要[program:PROGRAM_NAME] 部分的配置,PROGRAM_NAME表示 supervisord 要管理那個程式描述,會在客戶端supervisorctl 或 web 介面顯示,可以透過 supervisorctl start|restart|stop PROGRAM_NAME 來操作維護該程式。
舉個例子: 透過supervisor 管理haunt程式
三 常用的命令
3.1 啟動supervisor
#明確指定配置檔案
如果以不指定配置檔案啟動,則會找預設檔案
3.2 supervisorctl 命令介紹
supervisorctl 是supervisord的命令列客戶端工具,啟動時需要指定與supervisord使用同一份配置檔案,否則與supervisord一樣按照順序查詢配置檔案。
supervisorctl -c /etc/supervisord.conf
進入命令列模式
常用的命令介紹:
# 停止某一個程式,program_name 為 配置檔案中[program:x] 裡的 x
supervisorctl stop program_name
# 啟動某個程式
supervisorctl start program_name
# 重啟某個程式
supervisorctl restart program_name
# 結束所有屬於名為 groupworker 這個分組的程式 (start,restart 同理)
supervisorctl stop groupworker:
# 結束 groupworker:name1 這個程式 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部程式,注:start、restart、stop 都不會載入最新的配置檔案
supervisorctl stop all
# 載入最新的配置檔案,停止原有程式並按新的配置啟動、管理所有程式,相當於重啟所有的服務,該命令慎用
supervisorctl reload
# 根據最新的配置檔案,啟動新配置或有改動的程式,配置沒有改動的程式不會受影響而重啟
supervisorctl update
3.3 支援以 group 的方式來管理多個程式
supervisor 可以將多個應用程式以group的方式管理。
使用group配置之後,使用supervisorctl 管理程式的時候,變為管理group組內所有的程式
如果你的應用程式比較多而且部分應用程式有關聯性,可以使用group的方式,但是如果每個應用程式相互獨立且不耦合,推薦使用
“分而治之”的思路,每個應用程式單獨一個。這樣運維應用程式的時候 更方便簡單。
四 參考文章
[1]
[2]
是一款基於Python的程式管理工具,可以很方便的管理伺服器上部署的應用程式。supervisor是C/S模型的程式,其server端是supervisord 服務,client 端是supervisorctl 命令 。
Supervisor的功能如下:
1 啟動、重啟、關閉包括但不限於python程式。
2 檢視程式的執行狀態。
3 批次維護多個程式。
思考一下當應用伺服器要部署多個服務程式,機器關閉,重啟,如何批次維護?此時supervisor是一個不錯的選擇。可以用 supervisor 同時啟動所有應用程式而不用逐個啟動。
二 如何安裝配置
2.1 安裝步驟請移步 本文主要介紹如何配置和常用的命令
2.2 supervisor的配置
supervisor啟動的時候如果沒有加上-c引數,則會使用預設的配置檔案啟動,supervisor會按照如下順序去尋找預設配置檔案:
-
$CWD/supervisord.conf
-
$CWD/etc/supervisord.conf
- /etc/supervisord.conf
當然我們也可以使用如下命令生成配置檔案:
- echo_supervisord_conf > /etc/supervisord.conf
-
[rpcinterface:supervisor]
-
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
-
[unix_http_server]
-
file=/tmp/supervisor.sock ; supervisord 服務程式的sock檔案
-
[supervisord]
-
logfile=/data/logs/supervisord/supervisord.log ; 日誌檔案,預設是 $CWD/supervisord.log
-
logfile_maxbytes=50MB ; 日誌檔案大小,超出50MB會做輪轉,預設為50MB
-
logfile_backups=10 ; 日誌檔案保留備份數量
-
loglevel=info ; 日誌級別,預設 info,其它: debug,warn,trace
-
pidfile=/var/run/supervisord.pid ; pid 檔案
-
nodaemon=false ; 是否在前臺啟動,預設是 false,即以 daemon 的方式啟動
-
minfds=10240 ; 可以開啟的檔案描述符的最小值,預設 1024
- minprocs=200 ; 可以開啟的程式數的最小值,預設 200
-
#### ###
-
[supervisorctl]
-
serverurl = unix:///tmp/supervisor.sock
-
[include]
- files = /etc/supervisord.d/*.conf ;包含需要管理的應用程式的配置檔案
1 supervisord自身的配置項內容
2 需要管理的應用程程式的配置,在[include]裡面
2.3 應用程式的cnf檔案配置資訊
應用程式的配置檔案格式
應用程式的配置檔案格式需要[program:PROGRAM_NAME] 部分的配置,PROGRAM_NAME表示 supervisord 要管理那個程式描述,會在客戶端supervisorctl 或 web 介面顯示,可以透過 supervisorctl start|restart|stop PROGRAM_NAME 來操作維護該程式。
-
[program:PROGRAM_NAME]
-
屬性1=引數1
-
....
- 屬性N=引數N
-
[program:haunt]
-
directory = /opt/haunt_agent ; 程式的啟動目錄
-
command= /opt/haunt_agent/bin/haunt_agent -c /opt/haunt_agent/conf/haunt_agent.ini; 啟動haunt程式的命令,與手動啟動的命令一致
-
autostart = true ;在 supervisord 啟動的時候也自動啟動
-
startsecs = 5 ;啟動 5 秒後沒有異常退出,就當作已經正常啟動了
-
autorestart = true ;程式異常退出後自動重啟
-
startretries = 3 ; 啟動失敗自動重試次數,預設是 3
-
user = app ; 用哪個使用者啟動
-
redirect_stderr = true ; 把 stderr 重定向到 stdout,預設 false
-
stdout_logfile_maxbytes = 10MB ; stdout 日誌檔案大小,預設 20MB
-
stdout_logfile_backups = 10 ; stdout 日誌檔案備份數
-
stdout_logfile = /data/logs/supervisor/haunt_stdout.log; stdout日誌檔案,注意當指定目錄不存在時無法正常啟動,所以需要手動建立目錄(supervisord 會自動建立日誌檔案)
-
; 可以透過 environment 來新增需要的環境變數,一種常見的用法是修改 PYTHONPATH
- ; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
3.1 啟動supervisor
#明確指定配置檔案
- supervisord -c /etc/supervisord.conf
- supervisord
supervisorctl 是supervisord的命令列客戶端工具,啟動時需要指定與supervisord使用同一份配置檔案,否則與supervisord一樣按照順序查詢配置檔案。
supervisorctl -c /etc/supervisord.conf
進入命令列模式
-
# supervisorctl
-
SayHello EXITED Nov 02 11:27 PM
-
sample RUNNING pid 10082, uptime 2:56:32
-
hawk_agent:hawk_agent-1 RUNNING pid 10084, uptime 2:56:32
-
supervisor> status
-
SayHello EXITED Nov 02 11:27 PM
-
sample RUNNING pid 10082, uptime 2:56:35
-
hawk_agent:hawk_agent-1 RUNNING pid 10084, uptime 2:56:35
-
supervisor> reload
-
Really restart the remote supervisord process y/N? y
-
Restarted supervisord
-
supervisor>
-
supervisor> status
-
SayHello RUNNING pid 4359, uptime 0:00:02
-
sample RUNNING pid 4358, uptime 0:00:02
- yz-hawk_agent:yz-hawk_agent-1 RUNNING pid 4360, uptime 0:00:02
# 停止某一個程式,program_name 為 配置檔案中[program:x] 裡的 x
supervisorctl stop program_name
# 啟動某個程式
supervisorctl start program_name
# 重啟某個程式
supervisorctl restart program_name
# 結束所有屬於名為 groupworker 這個分組的程式 (start,restart 同理)
supervisorctl stop groupworker:
# 結束 groupworker:name1 這個程式 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部程式,注:start、restart、stop 都不會載入最新的配置檔案
supervisorctl stop all
# 載入最新的配置檔案,停止原有程式並按新的配置啟動、管理所有程式,相當於重啟所有的服務,該命令慎用
supervisorctl reload
# 根據最新的配置檔案,啟動新配置或有改動的程式,配置沒有改動的程式不會受影響而重啟
supervisorctl update
3.3 支援以 group 的方式來管理多個程式
supervisor 可以將多個應用程式以group的方式管理。
-
[group:GROUP_NAME]
-
programs=prog_name1,prog_name2 ; each refers to 'x' in [program:x] definitions
- priority=999 ; the relative start priority (default 999)
-
supervisorctl [start|restart|stop|reload] GROUP_NAME
-
管理單個應用程式
-
supervisorctl [start|restart|stop|reload] GROUP_NAME:prog_name1
- supervisorctl [start|restart|stop|reload] GROUP_NAME:prog_name2
“分而治之”的思路,每個應用程式單獨一個。這樣運維應用程式的時候 更方便簡單。
四 參考文章
[1]
[2]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30633755/viewspace-2127704/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 應用剖析工具介紹Python
- cpio工具介紹
- uml建模工具介紹
- Oracle BBED 工具介紹Oracle
- 【MySQL】mydumper工具介紹MySql
- Oracle DBV 工具 介紹Oracle
- 【Oracle】Opatch 工具介紹Oracle
- etcdctl工具介紹
- 爬蟲開發python工具包介紹 (2)爬蟲Python
- Python前景介紹Python
- Python Twisted 介紹Python
- Python字典介紹Python
- Python模組介紹Python
- Python Virtualenv 介紹Python
- Python 框架介紹Python框架
- python supervisor使用Python
- MySQL 官方工具utilities介紹MySql
- VS構建工具介紹
- [原創]SOAPUI工具介紹UI
- [原創]WebScarab工具介紹Web
- GTD工具ThinkingRock介紹Thinking
- Tkprof工具介紹和分析
- jclouds日誌工具介紹Cloud
- 介紹觀察Jboss的工具
- 原型設計工具介紹原型
- certutil工具的使用介紹
- Python資料分析--工具安裝及Numpy介紹(1)Python
- Python簡單介紹Python
- python類的介紹Python
- python描述器介紹Python
- python BeautifulSoup用法介紹Python
- Python BaseHTTPServer 介紹PythonHTTPServer
- Python虛擬環境工具-Virtualenv 介紹及部署記錄Python
- 11_Oracle bbed工具介紹Oracle
- DriverStudio工具包介紹
- java分詞工具hanlp介紹Java分詞HanLP
- Java常用工具介紹Java
- RTSP 流相關工具介紹