什么是 supervisor

supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程结束后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。

例如:监控Springboot、QQ机器人的进程,防止进程意外被杀死导致后端服务无法访问。


supervisor 三大构成要素

supervisord

supervisor的服务端:运行supervisor时会启动一个进程 supervisord ,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。

supervisorctl

supervisor的客户端:supervisorctl 是命令行管理工具,可以用命令来进行子进程的管理。

echo_supervisord_conf

supervisor的默认配置文件:一般生成默认文件为 supervisord.conf


安装 & 配置

使用yum命令安装supervisor

1
2
yum install -y epel-release
yum install -y supervisor

安装完成后会在根目录 /etc 目录下生成 supervisord.conf 文件和 supervisord.d 文件夹。

supervisord.conf 是supervisor的主配置文件,supervisord.d 文件夹是存放子进程的配置文件的文件夹。

开启web管理界面

修改 supervisord.conf 文件,取消以下几行前面的注释,并设置端口号和用户名密码。

1
2
3
4
[inet_http_server]         ; inet (TCP) server disabled by default
port=*:7001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))

设置开机启动

1
systemctl enable supervisord

检查是否开启成功: systemctl is-enabled supervisord,返回 enabled 则表示开启成功。

启动supervisor

1
systemctl start supervisord

检查启动状态: systemctl status supervisord,出现 active (running) 则表示启动成功。

Web管理界面

在浏览器中输入 http://ip:7001,输入用户名密码即可进入管理界面(记得开放端口)。


配置子进程

创建配置文件

进入supervisord.d文件夹,创建一个配置文件,文件名随意,后缀名为.ini,例如test.ini

配置文件内容

假设我们要启动一个python脚本,那么配置文件内容如下:

1
2
3
4
5
6
7
8
[program:my_test]                       # 进程名
command=/usr/bin/python3 /test/test.py # 启动命令
autostart=true # 是否自动启动
autorestart=true # 是否自动重启
startsecs=3 # 启动后等待3秒才认为启动成功
user=root # 运行用户
stdout_logfile=/test/test.log # 输出日志文件
stderr_logfile=/test/test_err.log # 错误日志文件

Tips:如果不知道命令路径,可以使用 which 命令查看,例如 which python3which java

重启supervisor

重启之前需要将正在运行的子进程先停止,否则会报错。

1
systemctl restart supervisord

查看子进程状态

1
supervisorctl status

也可以在Web管理界面中查看,以及方便地对子进程进行restart、stop、查看日志等操作。


测试

1、用supervisor启动一个进程

2、手动kill掉这个进程

3、如果看到supervisor自动重启这个进程,并且进程号改变了,说明已经生效。