0

我在 Laravel 队列系统中遇到了一个严重的问题,请帮我解决这个问题。

一旦我使用

$mailer = Mail::to($email_to)->queue(new ContactGeneral($data));  

它存储到数据库中并从终端php artisan queue:listen运行此命令, 一旦我关闭我的终端它就可以正常工作它不听我的队列。

为此,我在 kernem.php 文件中设置了一个计划,就像每分钟运行的那样

protected function schedule(Schedule $schedule){
    $schedule->command('queue:listen')->everyMinute();
}

将此行设置为 cronjob 并正常工作

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

问题是每分钟运行每分钟运行它不会杀死前一个进程并在下一分钟运行另一个进程它会减慢我的服务器

请你能告诉我什么是实现这个的最佳方法

提前致谢

4

2 回答 2

2

最好的方法是使用supervisor。虽然如果您在共享主机环境中运行应用程序,您可以使用以下命令处理队列一次然后退出进程,从而释放内存:

php artisan queue:work --once

根据您将拥有的队列数量,将队列设置为每 1、2 或 3 分钟运行一次,以确保前一个进程有时间消耗队列并且它们不会经常干扰。我认为您可以使用以下命令:

* * * * * cd /path-to-your-project && php artisan queue:work --once
于 2020-02-25T08:37:46.937 回答
0

不,您不需要安排此过程

只要 queue:work 进程正在运行,他就会查看您的“工作”表并逐个运行任务

你需要的是确保当你关闭控制台时进程不会结束,因为 user8555937 和 Webinion 说你需要主管及其配置文件,一旦你运行它,它将在后台运行,你可以忘记它

于 2020-02-25T08:43:34.457 回答