我有一个计划的工作,我希望每小时运行一次,这个工作所做的就是选择尚未取消订阅且尚未发送邮件的用户,然后将要发送的电子邮件排队。这一切都在 Amazon ElasticBeanstalk 中的工作环境中完成,并且在该部分中一切正常。
该作业每小时运行一次,并且电子邮件排队。但是,一旦他们排队,他们就会一直在飞行中,实际上并没有发送任何电子邮件。
如果我将计划的作业更改为每分钟运行一次,那么一切正常并且电子邮件被发送,尽管由于某种原因它们被发送两次,但它们正在被发送。
我不确定在这里查看什么,因为工作实例上的 laravel.log 文件中没有任何内容。我为预定命令的输出设置的日志文件中也没有写入任何内容。
这是我执行命令的代码。
protected function schedule(Schedule $schedule)
{
$schedule->command('ryno:send-email-batch')->hourly()->timezone('America/New_York')->sendOutputTo(storage_path() . '/logs/bulkmail.log');
}
这是正在执行的命令的代码
class SendBulkEmailBatch extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'ryno:send-email-batch';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send a batch of the emails';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$rows = User::where('welcomed', false)->where('unsubscribed', false)->take(600)->get();
if(count($rows) > 0) {
foreach ($rows as $row) {
// send email to the queue to be sent
Mail::queue('emails.welcome', [], function($message) use($row) {
$message->to($row->email);
$message->subject('Welcome!');
});
}
}
}
}
添加到队列中的每个作业都会在 failed_jobs 数据库表中结束,说明已达到最大尝试次数。关于为什么会发生这种情况的任何想法?