使用cron的Laravel 5.5 Scheduler命令

时间:2018-06-07 02:11:32

标签: php mysql laravel cron

对此问题的任何帮助都将非常感激。

我在特定时间运行了15个基于时间的任务。重要的是,他们在这些时间运行,因为他们根据运行的第一个cron任务构建数据。这是一个例子:

$schedule->command( 'task:build one' )->cron( '2/5 * * * *' );
$schedule->command( 'task:build two' )->cron( '3/15 * * * *' );
$schedule->command( 'task:build three' )->cron( '3 * * * *' );
$schedule->command( 'task:build four' )->cron( '4 */12 * * *' );
...

使用任务:以两个为例,问题如下:

任务:两个使用任务生成的数据库中的结果:一个并存储到另一个表。任务使用的表:一个只是由其他任务读取并且从未写入。所以:

任务:运行一次,不到一分钟。 任务:两分钟后开始。

在极少数情况下(可能每周最多8次,似乎是随机的)任务:两个延迟这么长的任务:一个设法再次运行(5分钟后)并在其表中添加一个额外的行,所以通过时间任务:两个人获得的数据超出了它的需要。

到目前为止我自己的研究:

  1. 没有sql死锁问题,因为每个任务只写入一个特定于自身的表,我看不到任何mysql错误日志。

  2. 数据库约为。 5GIG,在便宜的20美元数字海洋服务器上运行。

  3. 从15项任务来看,似乎有些任务比其他任务更有效,有些任务似乎从未受到影响。

  4. 我不是开发人员,我正在尝试确定这是否是Laravel问题,可能是由于我的执行不当或服务器问题。

    我希望能很好地描述这个问题以获得帮助,但如果没有,请告诉我您需要哪些额外信息。

1 个答案:

答案 0 :(得分:0)

您可以使用名为task overlap using命令的laravel功能 $schedule->command('emails:send')->withoutOverlapping(10); 要了解更多信息,请点击https://laravel.com/docs/5.5/scheduling#preventing-task-overlaps链接