Supervisor的安装与使用入门

xiaohai 2020-10-17 22:18:57 1398人围观 标签: 进程 
简介Supervisor是一个进程管理工具,官方的说法 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor

Supervisor是一个进程管理工具,官方的说法 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor
这个工具主要就两个命令:

  • supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令
  • supervisorctl:启动supervisor的命令行窗口

一、Supervisor安装

最新supervisor的推荐安装如下(开始):

# yum install epel-release
# yum install -y supervisor
# systemctl enable supervisord # 开机自启动
# systemctl start supervisord # 启动supervisord服务

# systemctl status supervisord # 查看supervisord服务状态
# ps -ef|grep supervisord # 查看是否存在supervisord进程

最新supervisor的安装配置文件就是在/etc/supervisor.conf,并且其他配置都放在/etc/supervisor.d/下,所以推荐使用这个安装。
最新supervisor的推荐安装(结束):

1、安装Supervisor
pip install supervisor
2、生成配置文件(后面指定生成的位置)
echo_supervisord_conf > /etc/supervisord.conf

我们把上面这部分配置保存到 /etc/supervisord.conf(或其他任意有权限访问的文件),然后启动 supervisord(通过 -c 选项指定配置文件路径,如果不指定会按照这个顺序查找配置文件:

$CWD/supervisord.conf,
$CWD/etc/supervisord.conf,
/etc/supervisord.conf
3、启动
supervisord -c /etc/supervisord.conf 
4、program 配置

上面我们已经把 supervisrod 运行起来了,现在可以添加我们要管理的进程的配置文件。可以把所有配置项都写到 supervisord.conf 文件里,但并不推荐这样做,而是通过 include 的方式把不同的程序(组)写到不同的配置文件里。
为了举例,我们新建一个目录 /etc/supervisor/ 用于存放这些配置文件,相应的,把 /etc/supervisord.conf 里 include 部分的的配置修改一下:

[include] files = /etc/supervisor/*.conf 

假设有个用 Python程序为例子。所以直接在命令行启动的方式可能是这样的:

python /python/test.py

现在编写一份配置文件来管理这个进程:(下面的test表示一个进程名称,所以不能重复,下面配置中,蓝灰色的是必须需配置的)

[program:test] 
directory = /python ; 程序的启动目录 
command = python /python/test.py ; 启动命令,可以看出与手动在命令行启动的命令是一样的 
autostart = true ; 在 supervisord 启动的时候也自动启动 
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 
autorestart = true ; 程序异常退出后自动重启 
startretries = 3 ; 启动失败自动重试次数,默认是 3 
user = nobody ; 用哪个用户启动 
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
5、使用 supervisorctl

Supervisorctl 是 supervisord 的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件,否则与 supervisord 一样按照顺序查找配置文件。

supervisorctl -c /etc/supervisord.conf

上面这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了:

status # 查看程序状态
stop test # 关闭 usercenter 程序
start test # 启动 usercenter 程序
restart test # 重启 usercenter 程序
reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
update # 重启配置文件修改过的程序

上面这些命令都有相应的输出,除了进入 supervisorctl 的 shell 界面,也可以直接在 bash 终端运行:
$ supervisorctl status
$ supervisorctl stop test
$ supervisorctl start test
$ supervisorctl restart test
$ supervisorctl reread
$ supervisorctl update

二、Supervisor使用

1、添加好配置文件后
2、更新新的配置到supervisord
supervisorctl update
3、重新启动配置中的所有程序
supervisorctl reload
4、启动某个进程(program_name=你配置中写的程序名称)
supervisorctl start program_name
5、查看正在守候的进程
supervisorctl
6、停止某一进程 (program_name=你配置中写的程序名称)
pervisorctl stop program_name
7、重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name
8、停止全部进程
supervisorctl stop all