用Supervisor管理进程、监控程序

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
4
sudo 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

本文总阅读量

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×