Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Scheduler with cron in Laravel
📖 Scenario: You are building a Laravel application that needs to run a task every minute to clean up old records. You will set up a scheduler using Laravel's task scheduling system and configure a cron job to trigger it.
🎯 Goal: Create a Laravel command, schedule it to run every minute using Laravel's scheduler, and configure the cron entry to run the scheduler.
📋 What You'll Learn
Create a Laravel command named CleanupOldRecords
Schedule the command to run every minute in app/Console/Kernel.php
Add the cron entry to run Laravel's scheduler every minute
💡 Why This Matters
🌍 Real World
Many web applications need to perform regular maintenance tasks like cleaning old data or sending notifications. Laravel's scheduler with cron makes this easy and reliable.
💼 Career
Understanding Laravel's task scheduling and cron integration is essential for backend developers working with Laravel to automate repetitive tasks efficiently.
Progress0 / 4 steps
1
Create the Laravel command CleanupOldRecords
Run the artisan command to create a new command named CleanupOldRecords inside the app/Console/Commands directory.
Laravel
Hint
Use php artisan make:command CleanupOldRecords to create the command.
2
Schedule the CleanupOldRecords command every minute
Open app/Console/Kernel.php and add the line $schedule->command('cleanup:oldrecords')->everyMinute(); inside the schedule method.
Laravel
Hint
Inside the schedule method, use $schedule->command('cleanup:oldrecords')->everyMinute();.
3
Add the cron entry to run Laravel scheduler every minute
Add the following cron entry to your server's crontab: * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1. Replace /path-to-your-project with your Laravel project path.
Laravel
Hint
Use crontab -e to edit the cron jobs and add the line to run Laravel's scheduler every minute.
4
Complete the CleanupOldRecords command handle method
Open app/Console/Commands/CleanupOldRecords.php and add a handle method that deletes records older than 30 days from the old_records table using Eloquent's whereDate and delete methods.
Laravel
Hint
Use Carbon to get the date 30 days ago and delete records older than that from the old_records table.
Practice
(1/5)
1. What is the main purpose of Laravel's scheduler when using cron expressions?
easy
A. To create database migrations automatically
B. To manually execute commands from the terminal
C. To automate running tasks at specified times without manual intervention
D. To generate user authentication scaffolding
Solution
Step 1: Understand Laravel scheduler role
Laravel scheduler automates running tasks like commands or jobs at set times.
Step 2: Identify cron usage
Cron expressions define when tasks run automatically without manual input.
Final Answer:
To automate running tasks at specified times without manual intervention -> Option C
Quick Check:
Scheduler automates tasks [OK]
Hint: Scheduler automates tasks on schedule, not manual commands [OK]
Common Mistakes:
Confusing scheduler with manual command execution
Thinking scheduler creates migrations
Assuming scheduler generates UI code
2. Which of the following is the correct way to schedule a command to run every day at midnight in Laravel's app/Console/Kernel.php?
easy
A. $schedule->command('emails:send')->hourly();
B. $schedule->command('emails:send')->dailyAt('00:00');
C. $schedule->command('emails:send')->cron('0 12 * * *');
D. $schedule->command('emails:send')->everyMinute();
Solution
Step 1: Identify daily midnight syntax
Laravel's dailyAt('00:00') schedules a command at midnight daily.
Step 2: Check other options
everyMinute() runs every minute, cron('0 12 * * *') runs at noon, hourly() runs every hour.
Final Answer:
$schedule->command('emails:send')->dailyAt('00:00'); -> Option B
Quick Check:
dailyAt('00:00') = midnight daily [OK]
Hint: dailyAt('00:00') means every day at midnight [OK]
Common Mistakes:
Using cron('0 12 * * *') which runs at noon, not midnight
Confusing everyMinute() with daily scheduling
Using hourly() instead of dailyAt()
3. Given this scheduler code in app/Console/Kernel.php:
A. Minute value 60 is invalid; minutes range from 0 to 59
B. Hour value is missing
C. Day of month is invalid
D. Cron expression is missing the command name
Solution
Step 1: Check cron minute field
The first field is minute; valid values are 0 to 59. 60 is invalid.
Step 2: Confirm other fields
Other fields are valid, but minute 60 causes syntax error.
Final Answer:
Minute value 60 is invalid; minutes range from 0 to 59 -> Option A
Quick Check:
Minute must be 0-59, 60 is invalid [OK]
Hint: Minutes in cron go 0-59, never 60 [OK]
Common Mistakes:
Using 60 as minute value
Ignoring cron field ranges
Assuming missing hour causes error here
5. You want to schedule a Laravel command to run every weekday at 6:30 PM but only if a certain feature flag is enabled. Which is the best way to implement this in app/Console/Kernel.php?
hard
A. Use if (config('features.enable_task')) { $schedule->command('task:run')->weekdays()->at('18:30'); }
B. Schedule the command daily at 18:30 without condition
C. Use cron expression '30 18 * * 0-6' to run every day
D. Add the condition inside the command handle method instead of scheduler
Solution
Step 1: Understand conditional scheduling
Laravel scheduler allows conditional scheduling by wrapping schedule calls in if statements.
Step 2: Use weekdays() and at() methods
weekdays() limits to Monday-Friday, at('18:30') sets time to 6:30 PM.
Step 3: Apply feature flag condition
Check config('features.enable_task') before scheduling to enable/disable task.
Final Answer:
Use if (config('features.enable_task')) { $schedule->command('task:run')->weekdays()->at('18:30'); } -> Option A
Quick Check:
Conditional scheduling with if + weekdays() + at() [OK]
Hint: Wrap schedule call in if to conditionally enable task [OK]
Common Mistakes:
Scheduling unconditionally ignoring feature flag
Using wrong cron for weekdays
Putting condition inside command instead of scheduler