如何防止Laravel队列作业,计划和cron作业终止服务器

时间:2018-04-13 07:14:12

标签: php laravel cron

我认为我的问题更多是后备,现在我在Laravel作业队列中有两个队列作业,而我正在使用数据库驱动程序。第一个命令根据API调用从另一个站点为我的用户创建凭据,第二个命令是通过电子邮件进行验证和2FA。此外,还有另一个更新命令会更改我的单位转换率。

protected function schedule(Schedule $schedule){
$schedule->command('update:conversionRate')->everyFiveMinutes();
$schedule->command('queue:work')->everyMinute(); 
} 

使用dispatch命令将队列作业添加到我的队列中,当电子邮件使用shouldQueue时,API调用使用调度函数的shouldQueue接口。

现在它可以工作,因为我可以看到我的数据库中的作业。但是当服务器cron作业运行时它会崩溃,我的日志文件显示我的MySQL用户已达到最大连接限制。因此,没有人可以使用该用户帐户评估数据库。

所以我的问题是如何设置cron作业和queue:work以便它不会使服务器崩溃?

1 个答案:

答案 0 :(得分:1)

我如何通过与数据库的最大连接来理解您的问题。

第一种解决方案,但最好不要增加对数据库的连接限制。

第二种解决方案是使用队列。您还没有尝试使用驱动程序而不是数据库,例如redis或beanstalkd?

您还可以每分钟运行一次命令。将cron作业用于队列是一种不好的做法。这是一个主管。

此外,与团队一起,尝试使用队列:工作参数。

示例

php artisan queue:work --sleep=3 --tries=3 --daemon

- sleep这个处理程序将在处理队列元素之间有一个中断

- tries = 3如果由于某种原因该项目将不会被处理,在此参数之后它将尝试3次并继续下一个元素,默认情况下它将尝试多次尝试。

尝试这些选项。