In this article, we will see how to schedule tasks in Laravel. I will give you step by step walk-through of how to schedule tasks in the Laravel task scheduling. This tutorial will show you how to set up a cron job in Laravel with a simple example. Let’s just dive into it.
Sometimes, we have a question in our minds. Why do we need to use the corn job, and what are its benefits? If you have these questions in your mind then you are at the right place.
Task schedulers are useful to automate the process in the background without the need for any user interactions. For eg. Sending emails every minute or hours, Sending notifications, Generating reports every month-end or weekly, etc. Hope you understood the use of scheduler in Laravel. Let’s see how to set up it in Laravel.
Step 1: Install Laravel
Skip this step if you have already installed Laravel. Run the below command to install the latest version of Laravel.
composer create-project --prefer-dist laravel/laravel blog
Step 2: Create A Command
In this step, we will create a new Artisan custom command which will execute the task as per our set timing. This command will also be visible if you just run the php artisan
in your command-line interface. Let’s just run the below command to create a new custom command.
php artisan make:command SendEmails --command=emails:send
After running the above command, a new file will be created in app/Console/Commands/SendEmails.php
directory.
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SendEmails extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'emails:send';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Sends email to inactive users';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$inactiveUsers = User::where('status', 'inactive')->get();
foreach ($inactiveUsers as $user) {
Mail::to($user)->send(new InactiveUsers($order));
}
}
}
In the handle()
method, we are sending emails to inactive users. You can simply create the mailable using the below command:
php artisan make:mail InactiveUsers
Step 3: Register as Task Schedule In Laravel
In this step, we will register our newly created command on
file with the specific time when you want to run your command as below:app/Console/Kernel.php
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('America/New_York'); | Set the timezone for the task |
Let’s open the app/Console/Kernel.php
file and register our command to run every day at 12:00 AM night.
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\SendEmails::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')
->dailyAt('24:00');
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
Step 4: Test Laravel Scheduler Command
Now, we are all set to run the schedule laravel command. Typically, you would not add a scheduler cron entry to your local development machine. Instead, you may use the schedule:work
Artisan command. This command will run in the foreground and invoke the scheduler every minute until you terminate the command:
php artisan schedule:work
After running the above command, all the users who are inactive will receive an email. You can also set a flag in the database to check email is already been sent or not.
Step 5: Running The Scheduler On Server
Now, if you want to set this cron on your server then you just need to open the server’s crontab file using crontab -e
and copy-paste the below command into it:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
OR OR OR OR OR
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
Additionally, read our guide:
- Laravel: Blade Switch Case Statement Example
- Laravel: Switch Case Statement In Controller Example
- Laravel: Change Column Type In Migration
- Laravel: Change Column Name In Migration
- How To Use Where Date Between In Laravel
- How To Add Laravel Next Prev Pagination
- Laravel Remove Column From Table In Migration
- Laravel: Get Month Name From Date
- Laravel: Increase Quantity If Product Already Exists In Cart
- How To Update Pivot Table In Laravel
- How To Dynamic iFrame URL In Elementor
- How To Handle Failed Jobs In Laravel
- How To Remove WooCommerce Data After Uninstall
- How To Get Latest Records In Laravel
- How To Break Nested Loops In PHP Or Laravel
- How To Pass Laravel URL Parameter
- Laravel Run Specific Migration
- How To Fix Elementor Icons Not Showing
- Laravel Video Upload Tutorial With Example
That’s it from our end. We hope this article helped you to learn how to schedule tasks in Laravel
Please let us know in the comments if everything worked as expected, your issues, or any questions. If you think this article saved your time & money, please do comment, share, like & subscribe. Thank you for reading this post 🙂 Keep Smiling! Happy Coding!