0

1時間ごとに実行したいスケジュールされたジョブがあります。このジョブは、購読を解除しておらず、メールを送信していないユーザーを選択し、送信するメールをキューに入れるだけです。これはすべて Amazon ElasticBeanstalk のワーカー環境で行われ、その部分に関してはすべてが機能しています。

ジョブは 1 時間ごとに実行され、電子メールはキューに入れられます。ただし、キューに入れられると、処理中のままになり、実際に電子メールが送信されることはありません。

スケジュールされたジョブを毎分実行するように変更すると、すべてが正常に機能し、電子メールが送信されますが、何らかの理由でそれぞれ 2 回送信されます。

ワーカーインスタンスの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 データベース テーブルに格納され、最大試行回数に達したことが示されます。なぜこれが起こるのかについて何か考えはありますか?

4

0 に答える 0