How to set up Task Scheduling with Cron job in Laravel?

Spread the love

Hellow developers,
Do you have a question? How do I create a cron job in Laravel 7/6? or how do you do a cron job in laravel 7/6? o How do I use the task scheduler in Laravel 7/6? So I’m going to give you a simple example of scheduling cron job tasks using Laravel 7/6. I’m going to create a step-by-step tutorial with cron job setup using Laravel 7/6 task scheduler. You can also configure the cron job on your server.

Why do we have to use cron job? And what is the benefit of using cron jobs in Laravel 6 and how is cron job set up in Laravel 6? If you have that question, I’ll explain why. Often times, we need to automatically send notifications or emails to users to update properties or products. At this point, you can define some basic logic for each day, time, etc., and send an email notification.

You also want to configure the cron job on your server then you can follow this tutorial and implement it.

Step 1: Install Laravel 7/6

If you did not configure the Laravel 6 application in this step, we will need a new Laravel 6 application. So run the following command and you will get a new clean Laravel 6 application.

composer create-project –prefer-dist laravel/laravel blog

Step 2: create a new command

In this step we need to create our custom command. The custom command is run with the task scheduler job. So run the following command to create a new custom command.

php artisan make:command DemoCron –command=demo:cron

Now make some changes to the script.

app/Console/Commands/DemoCron.php


<?php
   
namespace App\Console\Commands;
   
use Illuminate\Console\Command;
   
class DemoCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'demo:cron';
    
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';
    
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        \Log::info("Cron is working fine!");
     
        /*
           Write your database logic we bellow:
           Item::create(['name'=>'hello new']);
        */
      
        $this->info('Demo:Cron Cummand Run successfully!');
    }
}

Step 3: Register as a task planner

In this step we need to define our commands in the Kernel.php file with the time you want to run your command using the following functions:

->everyMinute(); Run the task every minute
->everyFiveMinutes(); Run the task every five minutes
->everyTenMinutes(); Run the task every ten minutes
->everyFifteenMinutes(); Run the task every fifteen minutes
->everyThirtyMinutes(); Run the task every thirty minutes
->hourly(); Run the task every hour
->hourlyAt(17); Run the task every hour at 17 mins past the hour
->daily(); Run the task every day at midnight
->dailyAt(’13:00′); Run the task every day at 13:00
->twiceDaily(1, 13); Run the task daily at 1:00 & 13:00
->weekly(); Run the task every week
->weeklyOn(1, ‘8:00’); Run the task every week on Tuesday at 8:00
->monthly(); Run the task every month
->monthlyOn(4, ’15:00′); Run the task every month on the 4th at 15:00
->quarterly(); Run the task every quarter
->yearly(); Run the task every year
->timezone(‘America/New_York’); Set the timezone

app/Console/Kernel.php

<?php
   
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\DemoCron::class,
    ];
     
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('demo:cron')
                 ->everyMinute();
    }
     
    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
     
        require base_path('routes/console.php');
    }
}

Step 4: Execute the programming command for the test

Now we can run our cron so you can check it manually from your cron using the command below. So let’s run the following command:

php artisan schedule:run

After running the above command, you can check the log file where text has already been printed. So open your log file, it looks like this:

storage/logs/laravel.php

[2019-04-24 03:46:42] local.INFO: Cron is working fine!  
[2019-04-24 03:46:52] local.INFO: Cron is working fine!  
[2019-04-24 03:46:55] local.INFO: Cron is working fine!  

Lastly, you can manage this command in the planning task. You need to add a single entry to your server’s crontab file.

* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

OR

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

I hope this tutorial could help you …

Thaaaaanks