Cron Job Execute Task Scheduling in Laravel Example

Sovary October 2, 2022 746
4 minutes read

Doing manually same task everyday may boring and wasted time, in some case the policy required transfer data or generated report in every circle of month or days, so what if you were absent, the work will stuck or something like that. You may want your Laravel app generated report in middle night and transfer to somewhere automatically.

In this article, we will implement cron job task scheduling tutorial in Laravel 9 via the command scheduler we will create a cron job in laravel 9, and how to create custom commands in laravel 9.

Cron Job Task Scheduling

Following guideline will help you to implement cron job task

  • Step 1 - Install Laravel Project
  • Step 2 - Create Cron Job Command
  • Step 3 - Register Cron Job Command
  • Step 4 - Run Scheduler Command
  • Step 5 - Laravel Set Cron Job on Live Server

Step 1 - Install Laravel Project

Not joking to implement Laravel you have to download Laravel Project and we are not required configure database connection in .env file. You might check how to install and configure database for Laravel 9.

Step 2 - Create Cron Job Command

Now we have to create custom command for cron job task. Run below command to generated cron job file

php artisan make:command TestCron --command=testing:cron

Open file app -> Console -> Commands -> TestCron.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class TestCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'testing: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("Testing Cron is Running ... !");
     
        /*
           Write your database logic we bellow:
           User::create(['email'=>'send mail']);
        */
      
        $this->info('testing:cron Command Run Successfully !');
    }
}

Step 3 - Register Cron Job Command

In this step we required to register cron job in kernel file and set a specific time interval to run the cron job. See below code

Open file 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\TestCron::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('testing:cron')->everyMinute();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

In function schedule() will run every minute as we call function everyMinute() but there are many more task schedule frequencies that you can assign the task. Check below table for more detail

Method Description
->cron('* * * * *'); Run the task on a custom cron schedule
->everyMinute(); Run the task every minute
->everyTwoMinutes(); Run the task every two minutes
->everyThreeMinutes(); Run the task every three minutes
->everyFourMinutes(); Run the task every four minutes
->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 minutes past the hour
->everyTwoHours(); Run the task every two hours
->everyThreeHours(); Run the task every three hours
->everyFourHours(); Run the task every four hours
->everySixHours(); Run the task every six hours
->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 Sunday at 00:00
->weeklyOn(1, '8:00'); Run the task every week on Monday at 8:00
->monthly(); Run the task on the first day of every month at 00:00
->monthlyOn(4, '15:00'); Run the task every month on the 4th at 15:00
->twiceMonthly(1, 16, '13:00'); Run the task monthly on the 1st and 16th at 13:00
->lastDayOfMonth('15:00'); Run the task on the last day of the month at 15:00
->quarterly(); Run the task on the first day of every quarter at 00:00
->yearly(); Run the task on the first day of every year at 00:00
->yearlyOn(6, 1, '17:00'); Run the task every year on June 1st at 17:00
->timezone('Asia/Phnom_Penh'); Set the timezone for the task

Step 4 - Run Scheduler Command

Now we will run the cron job with command below.

php artisan schedule:run

Step 5 - Laravel Set Cron Job on Live Server

If we want to run the task on live server please use the below command

* * * * * 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

Hope this would help you learn how to implement cron job task scheduling and also how to run scheduler in Laravel 9 on live server. Thanks for reading!!

You might also like...

Laravel  PHP  Laravel 9 
Author

As the founder and passionate educator behind this platform, I’m dedicated to sharing practical knowledge in programming to help you grow. Whether you’re a beginner exploring Machine Learning, PHP, Laravel, Python, Java, or Android Development, you’ll find tutorials here that are simple, accessible, and easy to understand. My mission is to make learning enjoyable and effective for everyone. Dive in, start learning, and don’t forget to follow along for more tips and insights!. Follow him