使用supervisor管理laravel队列

相关文章
使用Redis实现队列

使用Databse实现队列

下一篇:配置supervisor文件

背景

前面实现了三种的队列方式,使用命令

php artisan queue:work
可以启动队列

但是在项目运行中,会发现queue: listen是线性的,就说执行完一个才会执行下一个,这样并不能满足我们日常的异步耗时任务处理的需求,于是有人建议启动多个queue:listen
php artisan queue:listen && php artisan queue:listen …
这样虽然理论上是可行的,因为在异步队列的帮助下,程序并不会出现冲突。但是由于PHP本身对内存处理的缺陷,很难保证一个长期运行在后台的程序不出现内存泄露,例如queue:listen这样的死循环程序。因此在正式环境中我们更倾向于使用多个queue:work并行执行异步队列中的任务。queue:work只是读取队首的一项任务,执行完成后即结束程序,如果没有任务也会结束程序。这个方式类似于PHP对于WEB请求的处理,不会出现内存泄露。

利用Supervisor可以便捷的创建基于queue:work的异步队列并行处理

supervisor简介

Supervisor是是一个进程控制系统,由python编写,它提供了大量的功能来实现对进程的管理。

  • 程序的多进程启动,可以配置同时启动的进程数,而不需要一个个启动
  • 程序的退出码,可以根据程序的退出码来判断是否需要自动重启
  • 程序所产生日志的处理
  • 进程初始化的环境,包括目录,用户,umask,关闭进程所需要的信号等等
  • 手动管理进程(开始,启动,重启,查看进程状态)的web界面,和xmlrpc接口
一,安装

sudo apt-get install supervisor
或官网一样:
pip install supervisor

pip安装教程

因为我是使用homestead环境,自带的有supervisor,所以执行命令后,提示已经安装;

apt-cache show supervisor
查看已经安装的版本

在这里插入图片描述

二,创建配置并配置
  • 创建配置文件
    进入目录** cd /etc/supervisor/conf.d**,创建配置文件

    sudo vim laravel-worker.conf

[program:laravel-worker]   //这里要保持你的进程名字与你的文件名字一致
process_name=%(program_name)s_%(process_num)02d
command=php /home/vagrant/code/my-project-name/artisan queue:listen --tries=3  //指定监听某个项目的artisan命令,并设置某一个队列执行失败重试3次
autostart=true    //默认随supervisord自动启动,默认true
autorestart=true // whether/when to restart (default: unexpected)
numprocs=8 //默认启动的进程数目,默认为1
redirect_stderr=true //标准错误重定向到标准输出,默认false
stdout_logfile=/home/vagrant/code/my-project-name/storage/logs/worker.log //设置队列执行中产生的工作日志存储路径
  • 重新加载配置并启动

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
或者使用:
sudo supervisorctl -c /etc/supervisor/supervisord.conf

在这里插入图片描述

使用supervisor

启动后,就安心了,你可以执行你的代码,这时候你会发现,不用输入artisan,队列也在运行
此时,你也可以查看运行的进程数

sudo supervisorctl status

在这里插入图片描述
因为我的配置numprocs=8,所以这里可以看出有8个进程在运行;
额外一句,可以通过命令sudo ps -aux|grep supervisor* 查看supervisor相关运行的端口号

要在Laravel项目中使用Supervisor进行进程管理,你可以按照以下步骤进行配置: 1. 确保已经安装了Supervisor。可以使用以下命令检查是否已安装: ``` supervisorctl --version ``` 2. 创建一个新的Supervisor配置文件。可以使用以下命令创建一个新的配置文件: ``` sudo nano /etc/supervisor/conf.d/laravel-worker.conf ``` 3. 在配置文件中添加以下内容,替换其中的路径和命令为你的实际情况: ``` [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /path/to/artisan queue:work --tries=3 autostart=true autorestart=true numprocs=8 redirect_stderr=true stdout_logfile=/path/to/storage/logs/worker.log ``` 以上配置将创建一个名为"laravel-worker"的进程组,使用`php /path/to/artisan queue:work --tries=3`命令启动Laravel队列工作进程。`numprocs=8`表示创建8个进程实例。 4. 保存并关闭文件。 5. 重新加载Supervisor配置文件。使用以下命令重新加载配置文件: ``` sudo supervisorctl reread sudo supervisorctl update ``` 6. 启动和管理Laravel队列工作进程。使用以下命令启动、停止或重启Laravel队列工作进程: ``` sudo supervisorctl start laravel-worker:* sudo supervisorctl stop laravel-worker:* sudo supervisorctl restart laravel-worker:* ``` 7. 查看进程状态和日志。使用以下命令检查Laravel队列工作进程状态和日志输出: ``` sudo supervisorctl status laravel-worker:* tail -f /path/to/storage/logs/worker.log ``` 这样,你就可以使用Supervisor管理Laravel项目中的队列工作进程了。确保按照实际情况修改配置文件中的路径和命令,并注意日志文件的路径设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值