我正在使用Laravel 5.2。我目前有一个cron作业,它从我的数据库中取出数千行,并对每行进行计算。 cron作业目前大约需要一个小时才能运行,但数据库每天都在变大。
一种选择是使用crontab -e
手动添加更多cron作业(即将作业分成5个较小部分的5个cron作业)。但是,是否也可以执行以下操作:
crontab -e
设置单个cron作业。所以我的问题是,是否有可能只在crontab -e
中列出一个cron作业,然后PHP脚本决定应该分成多少个cron作业(基本上从一个cron作业中调用更多cron作业) PHP脚本)?
这样做是否安全?有没有更好的方法来解决这个问题?
这是我目前的剧本:
class PostCron extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'post_cron';
/**
* The console command description.
*
* @var string
*/
protected $description = '';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$posts = Post::all(); // currently returns ~1000 rows, but grows in size daily
foreach ($posts as $post) {
// computations on each separate post
}
}
}
答案 0 :(得分:0)
您可以创建作业并将每个帖子运行到队列中。请参阅此处laravel queue
因此您的代码将如下所示
resource.setrlimit (resource.RLIMIT_NOFILE, (20000,20000))
答案 1 :(得分:-1)
我建议使用排队。有一些工具可以做到这一点,比如Beanstalkd。然后你有一个cronjob,它将几个任务添加到队列中。