我目前有一个预定的控制台命令,每 5 分钟运行一次,没有重叠,如下所示:
$schedule->command('crawler')
->everyFiveMinutes()
->withoutOverlapping()
->sendOutputTo('../_laravel/storage/logs/scheduler-log.txt');
所以它工作得很好,但我目前有大约 220 个页面,需要大约 3 小时才能以 5 分钟的增量完成,因为我只是强制它以每个间隔抓取 10 个页面,因为每个页面需要 20-30 秒的时间来抓取各种因素。每个页面都是数据库中的一条记录。如果我最终要爬取 10,000 个页面,则此方法将不起作用,因为它需要超过 24 小时,并且每个页面应该每天重新爬取一次。
所以我的供应商允许最多 10 个并发请求(或更多计划更高的请求),那么并发运行它的最佳方式是什么?如果我只是复制调度程序代码,如果我复制了 10 次,它是否会运行相同的命令两次或类似 10 次?会导致什么问题?
然后我需要将参数传递给控制台,例如 1、2、3 等......我可以使用这些参数来确定要抓取哪些页面?即 1 将是 1-10 条记录,2 将是接下来的 11-20 条记录,依此类推。
使用这个StackOverfow答案,我想我知道如何传递它,如下所示:
$schedule->command('crawler --sequence=1')
但是我如何在Command
课堂上读取该参数?它是否只是成为一个常规的 PHP 变量,即$sequence
?