Scheduling a repetitive task is a great way of saving time. Often we might need to schedule a task to – say sending an email daily at a given time to all the existing users. Manually if we try to achieve this; it will become impossible once the user base crosses a certain threshold. Luckily for us, Laravel comes with its own Task Scheduler. Follow the tutorial to learn how to schedule a task in Laravel.
Step 1: Open your existing Laravel project or create a new one first. Navigate to its location and create a New Cron Command.
php artisan make:command TransactionRecordCron --command=transactionrecord:cron
Step 2: Navigate to app/Console/Commands/TransactionRecordCron.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Log;
class TransactionRecordCron extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'transactionrecord: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 int
*/
public function handle()
{
Log::info(__CLASS__."::".__FUNCTION__." Start");
//Insert Your Code/Logic here
Log::info(__CLASS__."::".__FUNCTION__." End");
}
}
Step 3: Schedule your Cron Command in 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\TransactionRecordCron::class,
//
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
$schedule->command('transactionrecord: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 (Testing Only): Do a trial run
php artisan schedule:run
Step 6: Start the Scheduler
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Debugging Note:
- Check Error Log: Debugging check laravel.log for errors storage/logs/laravel.php
- Set Timezone: Open config\app.php and edit ‘timezone’ => ‘UTC’
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
/*'timezone' => 'UTC',*/
'timezone' => 'Asia/Kolkata',
With over 3 years of versatile experience in IT Specialist, Project Manager, CTO, and Coding Instructor roles, I bring a comprehensive skill set to my current position as a Senior IT Support Analyst at RBC Capital Markets. I am proficient in stakeholder management, envisioning, producing, and delivering well-tested software products, and optimizing business processes. My passion lies in two key areas: technical writing and cloud engineering.
My expertise in technical writing is evidenced by published works on esteemed platforms like Techflow360, FreeCodeCamp, and Elsevier. In the realm of cloud engineering, I am further bolstered by my Google Cloud Associate Cloud Engineer certification.
At She Thinks Code, I actively contribute to offering computer science education to women from Least Developed Countries, harnessing technology to empower individuals. I am eager to explore collaborations and initiatives that capitalize on my expertise in diverse technical environments, including leveraging my cloud engineering skills.
