繁体   English   中英

Laravel 5运行队列:按laravel时间表进行工作

[英]Laravel 5 Run queue:work on laravel schedule

我有这样的时间表:

<?php

namespace App\Console;

use Illuminate\Support\Facades\Artisan;
use Illuminate\Console\Scheduling\Schedule;
protected function schedule(Schedule $schedule)
{
   Artisan::call('queue:work');
}

我在我的cronjob上添加了这个:

* * * * * cd /var/www/html/my_script_address && php artisan schedule:run

它是正确的代码吗? 我问,因为每分钟运行Artisan::call('queue:work')

这是最好的方法吗?

如果您只想运行计划作业,只需在app / console / kernel.php中编写:

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        // Do something
        DB::table('recent_users')->delete();
    })->daily();
}

并将以下代码放入/etc/cron.d/laravel-project

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

参见: https : //laravel.com/docs/5.7/scheduling#introduction


Queue是提供运行异步任务的,您可以安装主管以保持queue:work始终在运行。

请参阅此文档并配置queue:worksupervisor ,并使用schedule任务将您的作业调度到队列中。 修改app/console/kernel.php

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        // Do something
        App\MyScheduleJob::dispatch();
    })->daily();
}

现在,队列应始终在运行,并且调度作业可以每天调度到队列中。

我想写一个很长的答案并作解释。

1- Crontab是一个计划的工作经理。 每当调度程序计时时,它都会调用您的命令。

例如:如果您创建一个crontab条目以每分钟写一次hello world,它将每分钟执行一次,直到永恒。

2-队列工作者侦听队列,如果有任何等待完成的工作,它将起作用。 与cron作业非常相似,但是执行时间未预定义。 自己看看:

/**
 * Listen to the given queue in a loop.
 *
 * @param  string  $connectionName
 * @param  string  $queue
 * @param  \Illuminate\Queue\WorkerOptions  $options
 * @return void
 */
public function daemon($connectionName, $queue, WorkerOptions $options)
{
    // [...]
    while (true) {
        ...
    }
}

如您所见,她一直持续到外界的某种事物阻止了她。

4-您的调度程序将每分钟再创建一个这样的工作程序。


使用诸如supervisor东西来监视您的工人。 并认真创建您的工作人员实例。 请参阅laravel文档中的超级用户配置部分。

如果您坚持要同时使用cronqueue workers ,请使用queue:work --once让您的员工知道何时停止:)

根据文档https://laravel.com/docs/5.8/scheduling#scheduling-queued-jobs

您可以通过以下方法简单地将作业排队:

$schedule->job(new Heartbeat)->everyFiveMinutes();

您的队列工作者应该独立运行。 您应该使用超级用户来确保它保持运行。 但是,如果必须从调度程序启动队列工作器,则最好使用queue:work --stop-when-empty

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM