CentOS使用supervisor对进程进行监听和管理
什么是 supervisor
supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程结束后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。
例如:监控Springboot、QQ机器人的进程,防止进程意外被杀死导致后端服务无法访问。
supervisor 三大构成要素
supervisord
supervisor的服务端:运行supervisor时会启动一个进程 supervisord
,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。
supervisorctl
supervisor的客户端:supervisorctl
是命令行管理工具,可以用命令来进行子进程的管理。
echo_supervisord_conf
supervisor的默认配置文件:一般生成默认文件为 supervisord.conf
。
安装 & 配置
使用yum命令安装supervisor
1 | yum install -y epel-release |
安装完成后会在根目录 /etc
目录下生成 supervisord.conf
文件和 supervisord.d
文件夹。
supervisord.conf
是supervisor的主配置文件,supervisord.d
文件夹是存放子进程的配置文件的文件夹。
开启web管理界面
修改 supervisord.conf
文件,取消以下几行前面的注释,并设置端口号和用户名密码。
1 | [inet_http_server] ; inet (TCP) server disabled by default |
设置开机启动
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 | [program:my_test] # 进程名 |
Tips:如果不知道命令路径,可以使用 which
命令查看,例如 which python3
、which java
。
重启supervisor
重启之前需要将正在运行的子进程先停止,否则会报错。
1 | systemctl restart supervisord |
查看子进程状态
1 | supervisorctl status |
也可以在Web管理界面中查看,以及方便地对子进程进行restart、stop、查看日志等操作。
测试
1、用supervisor启动一个进程
2、手动kill掉这个进程
3、如果看到supervisor自动重启这个进程,并且进程号改变了,说明已经生效。