Supervisor管理Laravel队列进程报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Supervisor管理Laravel队列进程报错相关的知识,希望对你有一定的参考价值。

conf文件配置无误,supervisor服务启动也正常,但是监听列队任务的时候报错,求解。

参考技术A Supervisor的安装
1. 使用 pip 工具进行安装:

Python

1

sudo pip install supervisor

2. Ubuntu 系统使用 apt-get

1

sudo apt-get install supervisor

还有其他的安装方式,请见官网(http://supervisord.org/)

使用 Supervisor 运行多个 Laravel 队列工作者

【中文标题】使用 Supervisor 运行多个 Laravel 队列工作者【英文标题】:Running multiple Laravel queue workers using Supervisor 【发布时间】:2017-01-09 14:33:31 【问题描述】:

我使用 Laravel 队列,使用数据库驱动程序和主管来保持队列工作器始终运行:

[program:laravel_queue]
command=php artisan queue:listen --timeout=1800 --tries=5
directory=/var/app/current
stdout_logfile=/var/app/support/logs/laravel-queue.log
logfile_maxbytes=0
logfile_backups=0
redirect_stderr=true
autostart=true
autorestart=true
startretries=86400
EOB

某些队列任务可能需要大约 10 分钟才能完成。

我有两个问题:

1) 我如何编辑上述脚本以在同一个队列上运行多个(例如 3 个)队列工作人员。

2) 有没有一种方法可以根据等待处理的作业数量来扩展正在运行的队列工作人员的数量?

问题 2 的原因是我们有一批繁忙的时间,然后是很多安静的时间,所以我真的不想浪费资源让 3 个侦听器一直在运行。

【问题讨论】:

【参考方案1】:

在 supervisor 中,您可以使用参数 numprocs 指定进程数量,因此您可以在脚本中添加一行内容:

numprocs=5

现在,您可以做一些聪明的事情,例如,如果只有一些在队列上运行的进程花费的时间太长,您可以创建一组不同的队列进程来处理这些进程以及其他轻量进程的集合。 为了实现这一点,您可以创建一个主管配置,其中一个队列名称为--queue=longprocess,另一个为--queue=lightprocess,在您的程序中,您将作业分派到相应的队列中,这样,长进程不会延迟短进程。

您还可以在一个主管配置文件中指定queue priorities,例如--queue=lightprocess,longprocess。这样,您的工作人员将首先查找lightprocess,然后再运行longprocess

回答你的第二个问题,不,就主管而言,所有进程都在运行,它不知道队列是忙还是闲,因此它不能杀死进程并根据它们的使用创建它们,所以没有,您无法动态配置仅在您拥有的进程繁忙时创建更多进程。

注意,如果分配超过 1 个 numprocs,则必须将进程数添加到名称中。根据主管配置文档:

Supervisor 将启动与 numprocs 命名的程序一样多的实例。请注意,如果 numprocs > 1,则 process_name 表达式必须包含 %(process_num)s(或任何其他包含 process_num 的有效 Python 字符串表达式)。

主管配置文档:http://supervisord.org/configuration.html

【讨论】:

【参考方案2】:

从Laravel docs,您可以使用numprocs=3 生成3 个进程。

并且还要指定一个队列:command=php artisan queue:listen --queue=myqueue --tries=5

【讨论】:

【参考方案3】:

在主管配置文件中。添加以下代码

process_name=%(program_name)s_%(process_num)02d
numprocs=8

这将创建程序的 8 个不同进程。您只需根据需要更改numprocs=8 的值即可。

您可以使用sudo supervisorctl status查看正在运行的进程数

【讨论】:

以上是关于Supervisor管理Laravel队列进程报错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Supervisor 管理队列进程ModStart

使用Supervisor来管理你的Laravel队列

使用 Supervisor 配置 Laravel 运行队列处理器

使用 Supervisor 配置 Laravel 运行队列处理器

使用 Supervisor 配置 Laravel 运行队列处理器

Linux centos 安装 supervisor 管理 Laravel 队列