Laravel:同时运行cron作业任务

时间:2016-05-17 17:39:54

标签: php laravel laravel-5 cron laravel-5.2

我有几项任务,我计划在不同的时间运行。以下是这些任务:

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.');

arg1arg2是调度程序中的两个参数(例如0 55 10)。

我在日志文件中注意到这些脚本似乎不能同时运行。例如,当第一个任务运行(post_getter 0 5)时,第二个任务(post_getter 5 10)似乎只在第一个任务完成后运行,依此类推。

如何才能使Kernel课程中列出的所有任务同时运行,而不必等待上一个任务完成?

3 个答案:

答案 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();