在此问题上的任何帮助都将不胜感激。
我有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 * * *' );
...
使用task:two as 该问题的例子如下:
task:two uses 由生成的数据库中的结果task:one and 存储到不同的表。使用的tabletask:one is 只被其他任务读过,从不给别人写信。所以:
task:one runs 不到一分钟。task:two starts 一分钟后。
偶尔(可能一周8次,似乎是随机的)task:two is 耽搁太久task:one manages 再次运行(5分钟后)并在其表中添加一个额外的行task:two gets 它拥有的数据超过了它的需要。
根据我目前的研究:
没有sql死锁问题,因为每个任务只写入特定于自身的表,我看不到任何mysql错误日志。
这个数据库大约是5gig,运行在一个便宜的20美元的digital ocean服务器上。
从这15项任务来看,似乎有些任务比其他任务更有效,有些任务似乎从未有效。
我不是一个开发人员,我试图确定这是否是一个laravel问题,可能是由于我的错误实现,或服务器问题。
我希望这描述的问题足够好的帮助,但如果不是请让我知道你需要什么额外的信息。
1条答案
按热度按时间mw3dktmi1#
您可以使用名为task overlapping的laravel特性
$schedule->command('emails:send')->withoutOverlapping(10);
要了解更多信息,请点击链接https://laravel.com/docs/5.5/scheduling#preventing-任务重叠会经历这个过程