matviib/scheduler

Service for scheduling and managing cron tasks in laravel application

Installs: 2 967

Dependents: 0

Suggesters: 0

Security: 0

Stars: 21

Watchers: 2

Forks: 6

Open Issues: 2

Language:HTML

v1.0.4 2019-04-22 07:08 UTC

This package is auto-updated.

Last update: 2024-10-22 19:26:42 UTC


README

build passed StyleCI Total Downloads License

Installation

First steps

Add Provider for Laravel < 5.5

MatviiB\Scheduler\SchedulerServiceProvider::class,

Publish config and CronTasksList class files:

php artisan vendor:publish

and choose "Provider: MatviiB\Scheduler\SchedulerServiceProvider" if requested.

Files that must be published:

config/scheduler.php
app/Console/CronTasksList.php

Create database table:

 php artisan migrate

Let's finish setup

Move your commands from App\Console\Kernel schedule() function to new file: CronTasksList.php trait.

Add next line to schedule() function instead of list of commands:

<?php
 
namespace App\Console;
 
use MatviiB\Scheduler\Console\Kernel as SchedulerKernel;
 
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 = [
        ..
        ..
    ];
 
    /**
     * Define the application's command schedule.
     *
     * @param \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // make changes just here
        // cut your commands from here
        // and write next line
        with(new SchedulerKernel())->schedule($schedule);
    }

Paste your commands to app/Console/CronTasksList.php trait:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;

/**
 * Trait CronTasksList
 *
 * To use: uncomment all lines and copy your commands list
 * from app/Console/Kernel.php schedule() to tasks() function.
 *
 * @package App\Console
 */
trait CronTasksList
{
    public function tasks(Schedule $schedule)
    {
        // paste your commands here
        $schedule->command('example:command')->yearly()->withoutOverlapping();
    }
}

If everything done for now you can run next command, it will show your current commands list

php artisan scheduler:show

And you will see something like this

Scheduler is disabled.
You see standard tasks list.
+-----------------+------------------------------+-----------+-------------+-----+----------+
| command         | description                  | is_active | expression  | w_o | interval |
+-----------------+------------------------------+-----------+-------------+-----+----------+
| command:name    | Description for command:name | 1         | 0 * * * * * | 1   | 1 hour   |
| example:command | Command description          | 1         | * * * * * * | 1   | 1 minute |
+-----------------+------------------------------+-----------+-------------+-----+----------+

To use Scheduler you need to copy commands to schedulers table.

Note: every scheduler:create execution will soft delete old tasks and create fresh commands data.

php artisan scheduler:create

To use Scheduler you need enable it by adding to your .env next line:

SCHEDULER_ENABLED=true

Let's check status and scheduled tasks:

php artisan scheduler:show

And you will see something like this:

Scheduler is enabled.
You see scheduled tasks list configured with Scheduler.
+-----------------+------------------------------+-----------+-------------+-----+----------+
| command         | description                  | is_active | expression  | w_o | interval |
+-----------------+------------------------------+-----------+-------------+-----+----------+
| command:name    | Description for command:name | 1         | 0 * * * * * | 1   | 1 hour   |
| example:command | Command description          | 1         | * * * * * * | 1   | 1 minute |
+-----------------+------------------------------+-----------+-------------+-----+----------+

Usage

You can manage your scheduled task on page /scheduler by default.

Also you are free to configure it yourself in config/scheduler.php.

After creating operation you will have your scheduled tasks list and it will ready to work but with scheduler you have some more powerfull things.

  1. You can create different tasks for same command with different parameters and run it separately.

On the next screenshot you can see the same scheduled task for generate report with argument user equal 1 and option --client=2 for first task and argument user equal 3 and option --client=4 for next one. laravel scheduler

This is how the creating task page looks like: laravel scheduler

  1. Next powerfull thing - You can run your tasks from UI imediately with different arguments and options.

Next screenshot shows how it works: laravel scheduler

License

Scheduler for Laravel is open-sourced software licensed under the MIT license.