Supervisor 管理 yii2-queue 的 worker 进程
因为公司某块业务使用了消息队列(yii2-queue),今天产品反馈说业务延迟特别严重,所以怀疑是消息队列的问题,上线一看消息队列里有5000条任务在排队,以前只启用了一个worker进程,看来一个消费进程跑不及了,并且消息队列服务器的cpu和内存都是空闲的状态,所以想着多开几个worker来消费,以前一个worker进程的时候用crontab就管理了,现在多个进程这样肯定不太好,Yii官方推荐使用Supervisor。
这里记录一下安装配置过程。
首先安装EPEL源
yum install epel-release
然后安装supervisor
yum install -y supervisor
设置supervisor开机启动
systemctl enable supervisord
启动supervisor
systemctl start supervisord
查看supervisor状态
systemctl status supervisord # 查看supervisord服务状态
ps -ef|grep supervisord # 查看是否存在supervisord进程
然后为我们的yii2-queue编写一个配置文件,位置位于 /etc/supervisord.d/
cd /etc/supervisord.d/
vim yiiQueue.ini
yiiQueue.ini内容如下
[program:yii-queue-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /你的yii项目根目录/yii queue/listen --verbose=1 --color=0
autostart=true
autorestart=true
user=www
numprocs=5
redirect_stderr=true
stdout_logfile=/var/log/yii-queue-worker.log
配置项解释
process_name=: 进程名称 command=; 运行程序的命令 directory=; 命令执行的目录 autorestart=; 程序意外退出是否自动重启 autostart=; 是否自动启动 stderr_logfile=; 错误日志文件 stdout_logfile=; 输出日志文件 user=; 进程执行的用户身份 numprocs=;进程数量 startsecs=; 自动重启间隔(S)
编写好之后保存退出,每次修改、新增、删除配置文件后,需要通知supervisor更新一下,加载新的配置
supervisorctl update
然后启动配置中的程序
supervisorctl reload
完事!最后看一下supervisor的状态
supervisorctl status
可以看到我们的5个进程全部启动成功并且是running状态。要是实在不放心,可以看一下日志文件有没有正常再跑或者ps命令看一下有没有5个进程。
tail -f /var/log/yii-queue-worker.log
附一些supervisor常用命令
启动supervisord管理的所有进程
supervisorctl start all
停止supervisord管理的所有进程
supervisorctl stop all
启动supervisord管理的某一个特定进程
supervisorctl start program-name // program-name为[program:xx]中的xx
停止supervisord管理的某一个特定进程
supervisorctl stop program-name // program-name为[program:xx]中的xx
重启所有进程或所有进程
supervisorctl restart all // 重启所有
supervisorctl reatart program-name // 重启某一进程,program-name为[program:xx]中的xx
查看supervisord当前管理的所有进程的状态
supervisorctl status
参考链接 https://blog.csdn.net/freedom_fd/article/details/106387619
谢谢,学到了。