簡介
supervisor是一個client/server系統,允許用戶控制多個類unix系統的進程,擺脫rc.d腳本的不方便性.supervisor具有簡單,集中化管理,搞笑,可擴展性,高兼容.
整套軟件包含:supervisord(守護進程),supervisorctl(命令行工具),web server(一個web交互界面),XML-RPC 交互
安裝
#centos
yum install epel-release
yum install supervisor
#ubuntu
apt isntall supervisor
配置文件
查看/etc/supervisord.conf內容可以看到,配置文件被分為幾個部分,對這個幾個部分詳細說明
unix_http_server
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; sockef 文件的權限 (默認是 0700,只有屬主有讀寫執行權限)
;chown=nobody:nogroup ; socket 文件屬主和屬組
;username=user ; 指定可以訪問賬號(d默認是沒有)
;password=123 ; 指定訪問的密碼(默認是沒有)
這里file配置指定socket的路徑,這個是作為客服端訪問的一個入口,啟動unix是表示這個是一個監聽socket的程序,說明只能在本機訪問,不能給其他網絡客戶端訪問.這里客服端一般是supervisorctl命令.這個unix_http_server是默認啟動的.
如果你需要使用賬號密碼訪問需要給username和password指定賬號和密碼.
inet_http_server
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; 指定監聽的ip和端口
;username=user ; 指定賬號,默認是沒有
;password=123 ; 指定密碼,默認是沒有,這個賬號密碼最好添加
如果你想將控制入口暴露給網絡中的其他客戶端,可以去掉注釋,可以將這個在防火錢上授權給集中控制客戶端ip,做到集中控制程序.這個配置默認是沒有啟用的,有一定安全隱患在其中.
supervisord
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; 日志存放路徑,默認是當前目錄下supervisord.log
logfile_maxbytes=50MB ; 日志文件的最大大小,默認是50MB
logfile_backups=10 ; 日志保存的數量默認是10個
loglevel=info ; 日志等級是info,默認 info; 其他包括: debug,warn,trace
pidfile=/var/run/supervisord.pid ; pid文件路徑
nodaemon=false ; 是否運行為后端程序
minfds=1024 ; 最小可用的文件描述限制是1024
minprocs=200 ; 最小可用的進程數是200
;umask=022 ; 進程文件umask
;user=chrism ; 啟動進程使用的用戶名稱
;identifier=supervisor ; supervisord標識是supervisor
;directory=/tmp ; 在啟動的時候需要切換的目錄
;nocleanup=true ; 不清理臨時文件
;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP)
;environment=KEY=value ; 環境變量
;strip_ansi=false ; (strip ansi escape codes in logs; def. false)
這個supervisord程序的配置信息.
supervisorctl
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as http_username if set
;password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
這段配置在使用supervisorctl這個命令的時候,默認的參數,serverurl是前面unix_http_server或inet_http_server中指定的地址,username,prompt指定訪問需要用到的賬號密碼(如果有指定的話),history_file指定使用命令的歷史記錄.
自己程序配置段
;[program:theprogramname]
;command=/bin/cat ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1 ; number of processes copies to start (def 1)
;directory=/tmp ; directory to cwd to before exec (def no cwd)
;umask=022 ; umask for process (default None)
;priority=999 ; the relative start priority (default 999)
;autostart=true ; start at supervisord start (default: true)
;autorestart=true ; retstart at unexpected quit (default: true)
;startsecs=10 ; number of secs prog must stay running (def. 1)
;startretries=3 ; max # of serial start failures (default 3)
;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT ; signal used to kill process (default TERM)
;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
;user=chrism ; setuid to this UNIX account to run the program
;redirect_stderr=true ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10 ; # of stdout logfile backups (default 10)
;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;environment=A=1,B=2 ; process environment additions (def no adds)
;serverurl=AUTO ; override serverurl computation (childutils)
這個配置段是我們需要重點掌握的
- command=/bin/cat 程序的路徑,可以攜帶參數
- process_name=%(program_name)s ; 成熟名稱,默認是program_name,上面的theprogramname
- numprocs=1 ; 進程數量,一般是1
- directory=/tmp ; 進程運行的目錄
- umask=022 ; umask for process (default None)
- priority=999 ; the relative start priority (default 999)
- autostart=true ; start at supervisord start (default: true)
- autorestart=true ; retstart at unexpected quit (default: true)
- startsecs=10 ; number of secs prog must stay running (def. 1)
- startretries=3 ; max # of serial start failures (default 3)
- exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
- stopsignal=QUIT ; signal used to kill process (default TERM)
- stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
- user=chrism ; setuid to this UNIX account to run the program
- redirect_stderr=true ; 將錯誤輸出重定向到標準輸出中,這樣就可以將stdout和stderr到同一個文件中
- stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
- stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
- stdout_logfile_backups=10 ; # of stdout logfile backups (default 10)
- stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
- stdout_events_enabled=false ; emit events on stdout writes (default false)
- stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
- stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
- stderr_logfile_backups=10 ; # of stderr logfile backups (default 10)
- stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
- stderr_events_enabled=false ; emit events on stderr writes (default false)
- environment=A=1,B=2 ; process environment additions (def no adds)
- serverurl=AUTO ; override serverurl computation (childutils)
我使用的配置一般是
[program:example]
command=ping -i 5 baidu.com
directory=/example
process_name=%(program_name)s
autostart=true
autorestart=true
startsecs=3
startretries=3
stopsignal=TERM
exitcodes=0,2
stopwaitsecs=10
redirect_stderr=true
stdout_logfile = /tmp/example.log
stdout_logfile_maxbytes=1000MB
stdout_logfile_backups=5
include
[include]
files = supervisord.d/*.ini
一般操作是將我們自己的程序的supervisor的文件文件一個一個單獨放在這個files指定的目錄中,可以更好的管理和操作.include會將files中的配置加入進來.
supervisorctl
這個命令可以讓我們控制supervisor所管理的守護進程.
1 添加,刪除,修改配置
在之后的管理中,我們會向include中指定的files中添加,刪除,修改守護進程的配置,每次操作完后都需要是的supervisor重新加載配置.
supervisorctl update
2 重啟,停止,啟動守護進程
#重啟
supervisorctl restart processname
#重啟所有程序
supervisorctl restart all
#停止
supervisorctl stop processname
#停止所有程序
supervisorctl stop all
#啟動
supervisorctl start processname
#啟動所有
supervisorctl start all