Laravel队列(数据库驱动程序)+ Cron作业(任务调度程序)堆叠在服务器崩溃后不再发送

时间:2017-05-04 10:28:35

标签: laravel laravel-queue laravel-scheduler

我已经配置了一个 laravel队列来发送电子邮件,它可以很好地立即发送电子邮件。

我还使用了 laravel任务调度程序并配置了队列:监听每分钟执行,导致服务器崩溃,因为cron作业正在调用队列:工作循环一遍又一遍......该网站崩溃了。它是客户的现场,所以问题非常严重。

托管公司修改了我的laravel cron作业,每5分钟运行一次。并且由于它崩溃了,所有邮件现在都留在数据库中,数据库队列根本不起作用。我想这个过程根本没有运行。

我有这些问题:

  • 如何在数据库中执行堆叠队列记录?
  • 如何让数据库队列再次运行?
  • 如何配置cron作业& laravel时间表正常工作。

注意:我希望它使用数据库驱动程序,而不是使用redis或sync或其他东西,所以请专注于数据库驱动程序,谢谢。

2 个答案:

答案 0 :(得分:2)

  

laravel任务调度程序并配置队列:监听每分钟执行

这是错误的。您应该从不通过cron调度程序调用{​​{1}},否则您将会遇到类似于您所发生的意外行为。

您应该配置队列:监听永远作为守护进程运行。队列工作程序运行后 - 它将永远运行并根据需要处理作业。您可以使用Supervisor确保其继续运行。

答案 1 :(得分:1)

我认为问题是queue:listen命令实际上每分钟执行一次。这不应该发生。它应该只在特定时刻没有收听时执行。因此,应该检查监听器是否正在运行。请参阅this gist,应该适合您。

从数据库执行所有挂起队列任务,请尝试:

php artisan queue:restart

php artisan queue:work

希望这有帮助。