当用户在应用程序中注册时,我有一个发送电子邮件的工作。
SendWelcomeEmail.php
<?php
namespace App\Jobs;
use App\Jobs\Job;
use App\User;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendWelcomeEmail extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;
protected $user;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(Mailer $mailer)
{
$user = &$this->user;
$message = sprintf('Hello %s', $user->name);
$mailer->raw($message, function ($m) use ($user){
$m->from('lucas.nuck@gmail.com', 'Lucas Lopes');
$m->to($user->email, $user->name);
});
}
}
我想创建一个工作来执行php artisan队列:每分钟工作命令发送队列中的电子邮件。
答案 0 :(得分:0)
您想要运行队列守护程序,而不是运行命令。您需要在服务器环境中执行此操作,而不是使用laravels计划命令。
您可以使用类似Linux的screen
之类的命令来输入命令。
这会毫不费力地轮询您的队列服务器以获取新作业,然后处理它们。
答案 1 :(得分:0)
最简单的方法是设置主管。
https://laravel.com/docs/5.4/queues#supervisor-configuration,如果失败,它会自动重启你的队列:工作流程。
为您解决困惑:
在app/Console/Kernel.php
文件中,在schedule函数中,您将添加要以特定间隔运行的命令。一个例子是:
$schedule->command('SendFailedLoginsReport')->weekly()->mondays()->at('03:00');
在您的服务器上,您可以像这样添加您的cron
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
这个Cron每分钟都会调用Laravel命令调度程序