一、介绍
- 1.Supervisor是一个客户/服务器系统,它可以在类Unix系统中管理控制大量进程。Supervisor使用python开发,有多年历史,目前很多生产环境下的服务器都在使用Supervisor。
- 2.Supervisor的服务器端称为supervisord,主要负责在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件。可以在一个配置文件中配置相关参数,包括Supervisord自身的状态,其管理的各个子进程的相关属性。配置文件位于 /etc/supervisord.conf。
- 3.Supervisor的客户端称为supervisorctl,它提供了一个类shell的接口(即命令行)来使用supervisord服务端提供的功能。通过supervisorctl,用户可以连接到supervisord服务器进程,获得服务器进程控制的子进程的状态,启动和停止子进程,获得正在运行的进程列表。客户端通过Unix域套接字或者TCP套接字与服务端进行通信,服务器端具有身份凭证认证机制,可以有效提升安全性。当客户端和服务器位于同一台机器上时,客户端与服务器共用同一个配置文件 /etc/supervisord.conf,通过不同标签来区分两者的配置。
- 4.Supervisor也提供了一个web页面来查看和管理进程状态,对于公司开发,一般不用,可以在虚拟机上玩。
- 官网链接
二、安装
使用python2系列,python3暂未支持此功能
pip install supervisor
测试是否安装成功
echo_supervisord_conf
创建配置文件
echo_supervisord_conf > ../supervisord.conf
三、配置文件
生成必要的配置文件
echo_supervisord_conf > supervisord.conf
将配置文件统一放在目录下
cp supervisord.conf /etc/supervisord.conf
为了不将所有新增配置信息全写在一个配置文件里,我们新建一个文件夹,每个配置信息新增一个配置文件,相互隔离
mkdir /etc/supervisord.d/
修改配置文件
vim /etc/supervisord.conf
加入以下配置信息
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface
username=user ; default is no username (open server)
password=123 ; default is no password (open server)
[include]
files = /etc/supervisord.d/*.conf
pip安装产生的二进制文件在/home/superpika/.local/bin/supervisord下
加个任务,测试是否可以调度程序:
vim /etc/supervisord.d/tail.conf
- 正式写入时将注释删除(PS: 分号和包含分号之后的所有注释说明删除)
[program:tail1] ;program的名字是 tail1
command=tail -f /etc/supervisord.conf ;常驻后台的命令
autostart=true ;是否随supervisor启动
autorestart=true ;是否在挂了之后重启,意外关闭后会重启,比如kill掉!
startretries=3 ;启动尝试次数
stderr_logfile=/tmp/tail1.err.log ;标准输出的位置
stdout_logfile=/tmp/tail1.out.log ;标准错误输出的位置
启动
cat /etc/supervisord.conf # 看一下
supervisorctl shutdown # 关掉之前的
supervisord -c /etc/supervisord.conf # 加载我们的配置
supervisorctl status 查看supervisor管理进程的状态
- 打开http://127.0.0.1:9001/
四、常用命令
1、启动supervisord管理的所有进程
supervisorctl start all
2、停止supervisord管理的所有进程
supervisorctl stop all
3、启动supervisord管理的某一个特定进程
supervisorctl start program-name // program-name为[program:xx]中的xx
4、停止supervisord管理的某一个特定进程
supervisorctl stop program-name
5、重启所有进程或某一个特定进程
supervisorctl restart all // 重启所有
supervisorctl reatart program-name // 重启某一进程
6、查看supervisord当前管理的所有进程的状态
supervisorctl status
7、停止 supervisord
supervisorctl shutdown
8、更新 新的配置到 supervisord
supervisorctl update
9、重新启动配置中的所有程序
supervisorctl reload
10、同时开启多个进程
增加配置
process_name=%(program_name)s_%(process_num)02d ;多进程名称肯定不能相同,匹配多个
numprocs=4 ;启动N个进程
举例:
[program:tail1] ;program的名字是 tail1
command=tail -f /etc/supervisord.conf ;常驻后台的命令
process_name=%(program_name)s_%(process_num)02d ;多进程名称肯定不能相同,匹配多个
numprocs=4 ;启动N个进程
autostart=true ;是否随supervisor启动
autorestart=true ;是否在挂了之后重启,意外关闭后会重启,比如kill掉!
startretries=3 ;启动尝试次数
stderr_logfile=/tmp/tail1.err.log ;标准输出的位置
stdout_logfile=/tmp/tail1.out.log ;标准错误输出的位置
PS: 配置文件路径可以更改,文件内的路径也要同步更改。