You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel7如何配置Supervisor实现N个任务处理完后自动重启

Laravel 7 版本的queue:work命令原生没有提供--max-jobs参数,你可以通过「进程内计数+Supervisor自动拉起」的方式实现和Laravel 9一致的效果,配置步骤如下:

实现步骤

1. 添加任务计数退出逻辑

queue:work是常驻内存进程,你可以通过监听队列任务处理事件做计数,达到阈值后主动退出进程,代码直接写到app/Providers/AppServiceProvider.php的boot方法即可:

先引入依赖类:

use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobFailed;
use Illuminate\Support\Facades\Queue;

在boot方法中添加计数逻辑:

public function boot()
{
    // 单进程最大处理任务数,可按需修改
    $maxJobsPerProcess = 100;
    $currentJobCount = 0;

    // 任务处理成功计数
    Queue::after(function (JobProcessed $event) use (&$currentJobCount, $maxJobsPerProcess) {
        $currentJobCount++;
        if ($currentJobCount >= $maxJobsPerProcess) {
            // 以正常状态码退出进程
            exit(0);
        }
    });

    // 如果需要把失败任务也计入总数,保留这段逻辑,不需要可以删除
    Queue::failing(function (JobFailed $event) use (&$currentJobCount, $maxJobsPerProcess) {
        $currentJobCount++;
        if ($currentJobCount >= $maxJobsPerProcess) {
            exit(0);
        }
    });
}

2. 配置Supervisor

Supervisor的核心配置是开启autorestart规则,只要检测到work进程退出就自动拉起新进程,配置示例如下(配置文件路径一般为/etc/supervisor/conf.d/laravel-worker.conf,按自己实际环境调整):

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
# 替换为你自己的项目绝对路径,不需要加--max-jobs参数
command=php /var/www/your-project/artisan queue:work --sleep=3 --tries=3 --timeout=120
autostart=true
# 核心配置:进程退出后自动重启
autorestart=true
# 运行进程的系统用户,按实际环境修改,常见值为www-data、nginx
user=www-data
# 开启的work进程数,按需调整
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/your-project/storage/logs/queue-worker.log
stopwaitsecs=3600

配置写完后执行如下命令让Supervisor加载配置并启动进程:

supervisorctl reread
supervisorctl update
supervisorctl start laravel-worker:*
注意事项
  • 任务计数是单进程独立隔离的,如果你开了N个work进程,每个进程都会各自计数,满设定阈值后自行退出重启,不会互相干扰
  • 修改完服务提供者里的逻辑后,需要执行php artisan queue:restart让所有运行中的队列进程加载新代码
  • 用exit(0)返回的是正常退出状态码,不会触发Supervisor的异常告警逻辑

内容的提问来源于stack exchange,提问作者Trung Hiếu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 12:12:21