一、supervisor简介
Supervisor 是一个用Python
开发的通用进程管理程序 ,能够将普通命令行进程变为后台守护进程(daemon),并监控进程状态,当进程异常退出时能够自动重启。Supervisor 通过 fork/exec 的方式启动被管理的进程,使其成为 supervisor 的子进程。当子进程挂掉时,父进程可以准确获取信息并选择是否重启。
二、使用场景
Supervisor 广泛应用于各种需要长时间运行的后台服务管理,例如:
-
消息队列消费
:在消息队列消费场景中,可以通过多进程消费队列,避免单点故障 -
定时任务
:管理定时任务执行的任务,确保任务按时执行 -
服务守护
:作为服务守护进程,确保关键服务始终运行
三、安装
yum install -y supervisor
四、编辑supervisor配置文件
vim /etc/supervisord.conf
将[unix_http_server]和[inet_http_server]的一些注释去掉,如下:
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) #监听地址和端口,注意这里默认监听在127.0.0.1,即localhost。如果你想从外部访问,需要改为0.0.0.0或具体的外部IP地址,但出于安全考虑,通常不建议直接监听在所有接口上。
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
编辑后,可以启动supervisord 服务,后续每编辑一次都需要重启才能生效。
以下是一些服务命令:
#开启
systemctl start supervisord
#停止
systemctl stop supervisord
# 重启
systemctl restart supervisord
# 查看状态
systemctl status supervisord
五、配置Supervisor的子任务
假设我的thinkphp6
下有个 test_queue
队列, 我要把这个队列跑起来。、
- 进入到 /etc/supervisord.d 目录
cd /etc/supervisord.d
- 创建一个
.ini
文件
touch test_queue.ini
- 编辑
test_queue.ini
文件
[program:test_queue] ;要和文件名称相同
command=php /www/wwwroot/tp6/think queue:listen --queue test_queue ;启动该程序时将运行的命令
autostart=true ;supervisord 启动时自动启动
autorestart=true ;程序崩溃后自动重启
stderr_logfile=/var/log/test_queue.err.log ;错误日志路径
stdout_logfile=/var/log/test_queue.out.log ;标准输出日志路径
user=root ;运行该程序的用户
- 重新读取和应用配置文件
当在配置文件中添加了新的程序配置或者修改了现有程序的配置后,需要运行这个命令来让这些更改生效,通常的步骤是:
- 使用
supervisorctl reread
来重新读取配置文件 - 使用
supervisorctl update
来应用配置更改,并重启受影响的程序
当然,还有个更简单的,直接重启Supervisor
也是OK的
systemctl restart supervisord
六、使用 supervisorctl 管理进程
#查看所有子任务的状态
supervisorctl status
#查看test_queue任务的状态
supervisorctl status test_queue
# 停止 test_queue
supervisorctl stop test_queue
# 启动 test_queue
supervisorctl start test_queue
# 重启 test_queue
supervisorctl restart test_queue
七、web控制面板
- 当配置文件中 ,
inet_http_server
下的port
为127.0.0.1:9001
时,只能在虚拟机内的浏览器访问
- 当配置文件中,
inet_http_server
下的port
为0.0.0.0:9001
时,可以在本机电脑浏览器上用虚拟机IP:9001
来访问