我有几项任务,我计划在不同的时间运行。以下是这些任务:
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\PostGetter::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('post_getter 0 5')
->cron('*/15 * * * *');
$schedule->command('post_getter 5 10')
->cron('*/15 * * * *');
$schedule->command('post_getter 10 20')
->everyThirtyMinutes();
$schedule->command('post_getter 20 30')
->hourly();
}
}
为了记录每个任务的运行时间,我在PostGetter
类中添加了以下代码,以便在任务开始运行时进行记录:
Log::info('Post getter for {arg1} and {arg2} has started.');
arg1
和arg2
是调度程序中的两个参数(例如0 5
或5 10
)。
我在日志文件中注意到这些脚本似乎不能同时运行。例如,当第一个任务运行(post_getter 0 5
)时,第二个任务(post_getter 5 10
)似乎只在第一个任务完成后运行,依此类推。
如何才能使Kernel
课程中列出的所有任务同时运行,而不必等待上一个任务完成?
答案 0 :(得分:0)
Laravel中的Cronjobs /预定流程运行sequentially。
在Laravel 4.3中有关于并行处理计划任务的article。目前,Laravel 5中没有并行处理。
答案 1 :(得分:0)
我通过添加自定义cron作业而不是通过Laravel调度程序运行它来解决这个问题。
答案 2 :(得分:0)
从 Laravel 5.7 版本开始,如果您想在后台运行命令以便它们可以同时运行,您可以使用 runInBackground
方法:
$schedule->command('analytics:report')
->daily()
->runInBackground();