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

Laravel Queues (Database driver) + Cron job (task scheduler) stacked and are not being sent anymore after server crashed

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

我还使用了 laravel 任务调度程序并将 queue:listen 配置为每分钟执行一次 ,导致服务器崩溃,因为 cron 作业正在调用queue:work 一遍又一遍地循环……网站崩溃了。而且是客户端的现场,所以问题比较严重

托管公司将我的 laravel cron 作业修改为每 5 分钟 运行。自从它崩溃后,所有邮件现在都保留在数据库中,数据库队列根本不起作用。我想这个过程根本不是 运行ning。

我有这些问题:

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

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

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

php artisan queue:restart

并且:

php artisan queue:work

希望对您有所帮助。

laravel task scheduler and configured the queue:listen to be executed every minute

这是错误的。您应该 永远不要 通过 cron 调度程序调用 queue:listen,否则您会遇到意外的行为,例如发生在您身上的事情。

您应该将 queue:listen 设置为 运行 永远作为守护进程。一旦队列工作者 运行ning - 它将永远 运行 并根据需要处理作业。您可以使用 Supervisor 来确保它保持 运行ning.

在Laravel 8中(以前的版本不确定)

php artisan queue:work --stop-when-empty

这个命令可以毫无问题地“croned”。