gpt4 book ai didi

laravel - 如何在共享主机上运行队列工作程序

转载 作者:行者123 更新时间:2023-12-02 16:04:54 24 4
gpt4 key购买 nike

我的 Laravel 应用程序有一个 queued event listener我还设置了 cronjob 来运行 schedule:run每分钟。

但我不知道如何在后台持续运行 php artisanqueue:worker 命令。我发现this thread这是得票最多的方法:

$schedule->command('queue:work --daemon')->everyMinute()->withoutOverlapping();

但是,在different thread上有些人提示上述命令创建了多个队列工作程序。

如何安全地运行队列工作线程?

最佳答案

从 Laravel 5.7 开始,有一个新的队列命令可以在空时停止工作:

php artisan 队列:工作 --stop-when-empty

由于这主要用于电子邮件或一些小作业,因此我将其放在 cronjob 上每分钟运行一次。我想说,这并不是每分钟超过 100 个作业的解决方案,但适用于我的电子邮件。这将每分钟运行大约 5 秒来发送电子邮件,具体取决于电子邮件的数量或作业的大小。

步骤

  1. 创建新命令:php artisan make:command SendContactEmails
  2. SendContactEmails.php 中,更改:protected $signature = 'emails:work';
  3. handle()方法中,添加:
return $this->call('queue:work', [
'--queue' => 'emails', // remove this if queue is default
'--stop-when-empty' => null,
]);
  • 每分钟安排一次命令:
  • protected function schedule(Schedule $schedule)
    {
    $schedule->command('emails:work')->everyMinute();
    // you can add ->withoutOverlapping(); if you think it won't finish in 1 minute
    }
  • 更新您的 cronjobs:
  • * * * * * /usr/local/bin/php /home/username/project/artisan schedule:run > /dev/null 2>&1
    <小时/>

    Source

    Processing All Queued Jobs & Then Exiting

    The --stop-when-empty option may be used to instruct the worker to process all jobs and then exit gracefully. This option can be useful when working Laravel queues within a Docker container if you wish to shutdown the container after the queue is empty:

    php artisan queue:work --stop-when-empty

    关于laravel - 如何在共享主机上运行队列工作程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273132/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com