Supervisor

Supervisor
Supervisor是一個Python開發的client/server系統,能夠管理和監控*nix上面的進程。不過同daemontools同樣,它也不能監控daemon進程html

部件組成
Supervisor有不一樣的部件組成,部件分別負責不一樣的功能,對進程進行監控和管理。python

Supervisord(服務端)
Supervisor的server部分稱爲supervisord。主要負責管理子進程,響應客戶端的命令,log子進程的輸出,建立和處理不一樣的事件nginx

Supervisorctl(命令行)
Supervisor的命令行客戶端。它能夠與不一樣的supervisord進程進行通訊,獲取子進程信息,管理子進程web

Web Server(服務界面)
Supervisor的web server,用戶能夠經過web對子進程進行監控,管理等等,做用與supervisorctl一致。redis

XML-RPC interface(服務接口)
XML-RPC接口,提供XML-RPC服務來對子進程進行管理,監控安全

安裝服務器

Python安裝

sudo pip install supervisor
easy_install supervisorapp

Liunx發行版安裝

apt-get install supervisor
yum install supervisorsocket

使用
生成配置
echo_supervisord_conf > /path/to/supervisord.confui

若是出現沒有權限的問題,可使用這條命令

sudo su - root -c "echo_supervisord_conf > /etc/supervisord.conf"
配置
配置文件supervisord.conf是一個ini文件,能夠對http_server、supervisord、supervisorctl和program進行配置。

[unix_http_server]
;file=/tmp/supervisor.sock ; UNIX socket 文件,supervisorctl 會使用
file=/var/run/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; socket 文件的 mode,默認是 0700
;chown=nobody:nogroup ; socket 文件的 owner,格式: uid:gid

;[inet_http_server] ; HTTP 服務器,提供 web 管理界面
;port=127.0.0.1:9699 ; Web 管理後臺運行的 IP 和端口,若是開放到公網,須要注意安全性
;username=user ; 登陸管理後臺的用戶名
;password=123 ; 登陸管理後臺的密碼

[supervisord]
logfile=/tmp/supervisord.log ; 日誌文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB ; 日誌文件大小,超出會 rotate,默認 50MB
logfile_backups=10 ; 日誌文件保留備份數量默認 10
loglevel=info ; 日誌級別,默認 info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; pid 文件
nodaemon=false ; 是否在前臺啓動,默認是 false,即以 daemon 的方式啓動
minfds=1024 ; 能夠打開的文件描述符的最小值,默認 1024
minprocs=200 ; 能夠打開的進程數的最小值,默認 200

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; 經過 UNIX socket 鏈接 supervisord
;serverurl=http://127.0.0.1:9001 ; 經過 HTTP 的方式鏈接 supervisord

; 包含其餘的配置文件
[include]
files = relative/directory/.ini ; 能夠是 .conf 或 *.ini

[program:redis]
command = redis-server //須要執行的命令
autostart=true //supervisor啓動的時候是否隨着同時啓動
autorestart=true //當程序跑出exit的時候,這個program會自動重啓
startsecs=3 //程序重啓時候停留在runing狀態的秒數

; 管理的單個進程的配置,能夠添加多個program
[program:chatdemon]
command=python /home/felinx/demos/chat/chatdemo.py
autostart = true
startsecs = 5
user = felinx
redirect_stderr = true
;這對這個program的log的配置,上面的logfile_maxbytes是supervisord自己的log配置
stdout_logfile_maxbytes = 20MB
stdoiut_logfile_backups = 20
stdout_logfile = /var/log/supervisord/chatdemo.log

; 配置一組進程,對於相似的program能夠經過這種方式添加,避免手工一個個添加
[program:groupworker]
command=python /home/felinx/demos/groupworker/worker.py
numprocs=24
process_name=%(program_name)s_%(process_num)02d
autostart = true
startsecs = 5
user = felinx
redirect_stderr = true
stdout_logfile = /var/log/supervisord/groupworker.log

[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的啓動目錄
command = gunicorn -c gunicorn.py wsgi:app ; 啓動命令,能夠看出與手動在命令行啓動的命令是同樣的
autostart = true ; 在 supervisord 啓動的時候也自動啓動
startsecs = 5 ; 啓動 5 秒後沒有異常退出,就看成已經正常啓動了
autorestart = true ; 程序異常退出後自動重啓
startretries = 3 ; 啓動失敗自動重試次數,默認是 3
user = leon ; 用哪一個用戶啓動
redirect_stderr = true ; 把 stderr 重定向到 stdout,默認 false
stdout_logfile_maxbytes = 20MB ; stdout 日誌文件大小,默認 50MB
stdout_logfile_backups = 20 ; stdout 日誌文件備份數
; stdout 日誌文件,須要注意當指定目錄不存在時沒法正常啓動,因此須要手動建立目錄(supervisord 會自動建立日誌文件)
stdout_logfile = /data/logs/usercenter_stdout.log

; 能夠經過 environment 來添加須要的環境變量,一種常見的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
(更多配置說明請參考:http://supervisord.org/configuration.html

Supervisord管理
Supervisord安裝完成後有兩個可用的命令行supervisor和supervisorctl,命令使用解釋以下:

命令 解釋 supervisord [ -c /etc/supervisord.conf ] 初始啓動Supervisord,啓動、管理配置中設置的進程。 supervisorctl stop programxxx 中止某一個進程(programxxx),programxxx爲[program:chatdemon]裏配置的值,這個示例就是chatdemon。 supervisorctl start programxxx 啓動某個進程 supervisorctl restart programxxx 重啓某個進程 supervisorctl stop groupworker: 重啓全部屬於名爲groupworker這個分組的進程(start,restart同理) supervisorctl stop all 中止所有進程,注:start、restart、stop都不會載入最新的配置文件。 supervisorctl reload 載入最新的配置文件,中止原有進程並按新的配置啓動、管理全部進程。 supervisorctl update 根據最新的配置文件,啓動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啓。 ctl中: help 查看命令 ctl中: status 查看狀態 supervisorctl -c conf/app.conf status 自定義配置路徑須要這麼進?沒嘗試 使用注意 用supervisor啓動Redis,nginx等進程時,須要在註釋掉相關進程的啓動方式不要用守護模式啓動(daemonize爲no) supervisor進程文件默認放在 /tmp 目錄下,修改成 /var/run 目錄,避免被系統刪除 supervisor日誌文件默認在 /tmp/supervisord.log

相關文章
相關標籤/搜索