Supervisor是一个很棒的进程管理工具,能够监听进程重新启动,不需写脚本进行控制。
简介
Supervisor(http://supervisord.org)是一个用Python写的进程管理client/server系统工具,能够让用户检测和控制UNIX型操作系统上进程,支持Linux、Mac OS X,windows上不能使用。
它能够用来方便地监听、重启、启动、关闭一个或者多个进程。当用supervisor管理的一个进程意外被kill,supervisor能够监听到进程杀死,会自动将它重启,做到自动恢复的功能,不需写shell脚本进行控制。
安装方式
Ubuntu上:apt-get install supervisor
Centos上:yum install supervisor
用这些基于源的方式安装,supervisor的版本可能会比较老。推荐使用基于python的安装方式:easy_install supervisor
或者是基于pip的安装方式:pip install supervisor
配置
直接输入echo_supervisord_conf
命令能够将默认配置项输出到terminal。但一般需要重定向到一个配置文件中:echo_supervisord_conf > /etc/supervisord.conf
如果没有root权限,可以重定向到自定义路径的配置文件:echo_supervisord_conf > [directory]/[yourconf]
管理配置文件
安装完成后,用户通过编写配置文件来满足自己的需求,这些配置都可以写到supervisord.conf里。如果应用程序很多,最好通过include的方式把不同程序(组)写到不同的配置文件里。1
2[include]
files = /etc/supervisor/*.conf
需要改动的配置信息有这些:1
2
3
4
5
6
7
8
9
10
11
12
13[program:server] ;写你的程序名字
directory = /home/xxx ; 程序的启动目录
command = sh run.sh ; 启动命令,与命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = xxx ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /etc/supervisord.d/log/confd.log ;日志统一放在log目录下
启动supervisor
启动进程:supervisord -c [directory]/[yourconf]
(通过 -c 选项指定配置文件路径,如果不指定会按照以下路径查找配置文件:$CWD/supervisord.conf, $CWD/etc/supervisord.conf, /etc/supervisord.conf)
通过命令行查看supervisord是否在运行:ps aux | grep supervisord
设置开机启动以及systemd方式启动1
2
3
4sudo chmod +x /etc/rc.d/init.d/supervisord
sudo chkconfig --add supervisord
sudo chkconfig supervisord on
sudo service supervisord start
控制命令
Supervisord有两个可用的命令行
- supervisord(server端,之前用到了)
- supervisorctl(client端,是supervisord的命令行客户端工具,用来在控制supervisord)
supervisorctl
supervisorctl stop myprogram
,停止某一个进程(myprogram),myprogram为 [program:xxx] 里配置的进程名称。supervisorctl start myprogram
,启动某个进程。supervisorctl restart myprogram
,重启某个进程。supervisorctl status
,查看进程状态。supervisorctl stop groupworker
,重启所有属于名为 groupworker 这个分组的进程(start,restart 同理)。supervisorctl stop all
,停止全部进程,注:start、restart、stop 都不会载入最新的配置文件。supervisorctl reload
,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。supervisorctl update
,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
e.g.1
2$ supervisorctl status
server RUNNING pid 19985, uptime 0:00:05
直接输入supervisorctl会进入shell交互界面。1
2$ supervisorctl
supervisor>
supervisord
supervisord用来初始启动supervisord,启动、管理配置中设置的进程。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29$ supervisord --help
supervisord -- run a set of applications as daemons.
Usage: /usr/bin/supervisord [options]
Options:
-c/--configuration FILENAME -- configuration file
-n/--nodaemon -- run in the foreground (same as 'nodaemon true' in config file)
-h/--help -- print this usage message and exit
-v/--version -- print supervisord version number and exit
-u/--user USER -- run supervisord as this user (or numeric uid)
-m/--umask UMASK -- use this umask for daemon subprocess (default is 022)
-d/--directory DIRECTORY -- directory to chdir to when daemonized
-l/--logfile FILENAME -- use FILENAME as logfile path
-y/--logfile_maxbytes BYTES -- use BYTES to limit the max size of logfile
-z/--logfile_backups NUM -- number of backups to keep when max bytes reached
-e/--loglevel LEVEL -- use LEVEL as log level (debug,info,warn,error,critical)
-j/--pidfile FILENAME -- write a pid file for the daemon process to FILENAME
-i/--identifier STR -- identifier used for this instance of supervisord
-q/--childlogdir DIRECTORY -- the log directory for child process logs
-k/--nocleanup -- prevent the process from performing cleanup (removal of
old automatic child log files) at startup.
-a/--minfds NUM -- the minimum number of file descriptors for start success
-t/--strip_ansi -- strip ansi escape codes from process output
--minprocs NUM -- the minimum number of processes available for start success
--profile_options OPTIONS -- run supervisord under profiler and output
results based on OPTIONS, which is a comma-sep'd
list of 'cumulative', 'calls', and/or 'callers',
e.g. 'cumulative,callers')
Supervisorctl 是 supervisord 的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件,否则与 supervisord 一样按照顺序查找配置文件。1
supervisorctl -c /etc/supervisord.conf