Automating repetitive tasks is essential in modern web applications. Laravel provides a powerful Task Scheduling feature that makes it easy to define and manage cron jobs directly from your application. In this guide, we’ll walk through the process of writing and scheduling a cron job in Laravel.
Step 1: Create a New Artisan Command
Laravel’s make:command
Artisan command allows you to generate custom console commands
that can be scheduled as cron jobs.
php artisan make:command SendReportCommand
This will create a new file inside app/Console/Commands/SendReportCommand.php
.
Step 2: Define the Command Logic
Open the generated command file and add your desired logic in the handle()
method.
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SendReportCommand extends Command
{
// Command signature (used when calling the command)
protected $signature = 'report:send';
// Command description
protected $description = 'Send daily report to admin';
public function handle()
{
// Your task logic here
\Log::info('Daily report has been sent successfully!');
$this->info('Report sent successfully!');
}
}
Step 3: Register the Command in Kernel
Next, open app/Console/Kernel.php
and register your command inside the
$commands
array.
protected $commands = [
\App\Console\Commands\SendReportCommand::class,
];
Step 4: Schedule the Command
In the same Kernel.php
file, you can define how often the command should run
using the schedule()
method.
protected function schedule(Schedule $schedule)
{
// Run the command daily at midnight
$schedule->command('report:send')->daily();
}
Step 5: Configure System Cron Job
Finally, you need to add a cron entry to your server to run Laravel’s scheduler every minute. Open your server’s crontab file:
crontab -e
Add the following line:
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
Step 6: Test the Cron Job
You can manually test your command by running:
php artisan report:send
If everything is set up correctly, Laravel will execute your scheduled task at the defined intervals.
Conclusion
Writing cron jobs in Laravel is simple and elegant thanks to the built-in task scheduling system. Instead of dealing directly with complex cron expressions, you can manage schedules in one place and keep your application organized. With just a few steps, you can automate reports, notifications, cleanups, or any repetitive task in your application.
Comments
Post a Comment