Supervisor(http://supervisord.org/)是用Python开发的一个服务,用于在Linux/Unix系统下的一个进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,保证进程的运行。不再需要自己写shell脚本来控制。可以用于保证异步任务的运行。
Supervisor安装
yum install supervisor
配置
通过yum安装supervisor后会自动生成对应的配置文件。配置文件的名字为supervisord.conf
。通常位于/etc/supervisor.conf
。如果找不到可以用下面的命令搜索下。
sudo find / -name supervisord.conf
配置文件说明
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 会使用
;[inet_http_server] ; HTTP服务器,提供web管理界面
;port=127.0.0.1:9001 ; 地址加端口,一般生产环境不开启此项。常用功能使用命令行即可满足需求
;username=user ; 用户名
;password=123 ; 密码
[supervisord]
logfile=/tmp/supervisord.log ; supervisor的日志文件路径
logfile_maxbytes=50MB ; 日志文件的最大大小。超出此大小会分割日志文件。设置为0则不限制大小。
logfile_backups=10 ; 日志文件保留备份数量默认10,设为0表示不备份
loglevel=info ; 日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid ; pid 文件
nodaemon=false ; 是否在前台启动,默认是false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 连接到supervisord的sock url。使用默认配置即可
[program:xyz] ;要守护的进程。其中xyz为要守护的进程名字,用于在supervisor中标识该进程。
command=/bin/cat ; 程序的启动命令
process_name=%(program_name)s_%(process_num)02d ; 同一个脚本,要运行为多个进程时,进程的命名规则。program_name为进程名,process_num为第几个进程
numprocs=1 ; 此进程可以运行的个数。与process_name配合使用
priority=999 ; 存在多个要守护的进程时,此进程启动的优先级
autostart=true ; supervisor启动时是否自动启动此进程
startsecs=1 ; 启动1秒后没有异常退出,则认为进程启动成功。默认为1
startretries=3 ; 启动失败时,重新启动的次数
autorestart=unexpected ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
user=chrism ; 用哪个用户启动进程,默认是root
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=1MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups=10 ; stdout 日志文件备份数,默认是10
;stderr_logfile=/a/path ; stdout 日志文件(supervisor不会自动创建目录,所以设置的目录必须存在)
stderr_logfile_maxbytes=1MB ; stderr 日志文件大小,默认50MB(default 50MB)
stderr_logfile_backups=10 ; stderr 日志文件备份数,默认是10
;其它配置文件
[include]
files = relative/directory/*.ini ;此目录下和所有ini文件。ini文件中可以配置要守护的进程。格式与前文[program:xyz]的配置相同。一个ini文件中可以配置多个进程。supervisor启动时,除启动此配置文件指定的进程外,也会启动ini文件中指定的进程。
supervisor 交互命令
启动supervisor
sudo systemctl start supervisord ;启动
sudo systemctl status supervisord ;查看运行状态
sudo systemctl stop supervisord ;停止
sudo systemctl restart supervisord ;重启
supervisor bash 终端命令
- 查看当前守护的进程
sudo supervisorctl status ;查看当前守护的进程
ewallet-create-ewallet RUNNING pid 6591, uptime 12:31:51
ewallet-create-workcredit RUNNING pid 7362, uptime 12:31:37
ewallet-ewallet-request-payment-changed STOPPED Feb 25 11:46 PM
第一列表示进程名称,进程名称在配置文件的[program:xyz] 块中
第二列表示状态。RUNNING表示正在运行,STOPED停止
uptime表示进程持续运行时间
- 启动一个守护进程
sudo supervisorctl start ewallet-ewallet-request-payment-changed ;启动一个进程(ewallet-ewallet-request-payment-changed为进程名称)
注意
- 必须通过supervisor启动进程,才能被守护。直接通过bash或其他方式启动的不会被守护
- Supervisor只能管理非daemon的进程。不能管理守护进程。
- 停止一个守护进程
sudo supervisorctl stop ewallet-ewallet-request-payment-changed
- 重启一个守护进程
sudo supervisorctl restart ewallet-ewallet-request-payment-changed
- 重新读取配置
sudo supervisorctl update
配置文件有更新,添加修改或者删除进程后,使用此命令。重新载入配置。