Laravel Scheduler Not Running? Fix It Fast (Step-by-Step Guide for 2026)
π Introduction
If your Laravel scheduler is not running, critical tasks like emails, backups, and reports will silently fail — and your application can break without obvious errors.
This is one of the most common production issues in Laravel.
π The root cause is usually:
-
Missing cron job
-
Queue not running
-
Server misconfiguration
In this guide, you’ll learn:
-
How Laravel scheduler actually works
-
Why it fails in real-world environments
-
How to fix it in local, VPS, and shared hosting setups
π Related (Important)
If your scheduler is running but jobs are getting stuck during execution, this is a deeper queue-level issue.
π Laravel jobs stuck in queue fixβ° What is Laravel Scheduler?
Laravel Scheduler lets you define all automated tasks in one place instead of managing multiple cron jobs.
Example:
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')->daily();
}
π This runs your command automatically every day.
βοΈ How Laravel Scheduler Works
Laravel scheduler depends entirely on cron.
Required cron job:
* * * * * php /path-to-project/artisan schedule:run >> /dev/null 2>&1
π This runs every minute and triggers Laravel’s scheduler.
β±οΈ What Does “Cron Runs Every Minute” Mean?
* * * * *
π It simply means:
π Run the command every minute
π What Happens Internally?
Every minute:
-
Cron runs
schedule:run -
Laravel checks scheduled tasks
-
Executes due tasks
β οΈ Important Behavior
-
Cron does not wait for previous execution
-
It blindly runs every minute
β If No Tasks Exist
-
Scheduler runs
-
Nothing happens
-
Exits instantly
β If Tasks Exist
-
Executes tasks
-
May push jobs to queue
π§ Core Concepts (Must Understand)
π¦ Job (Task)
A job is a unit of work like:
-
Sending email
-
Processing data
-
Generating reports
π Queue (Task List)
Queue stores jobs before execution.
π Think of it as a to-do list
π· Worker (Executor)
Worker processes jobs:
php artisan queue:work
Worker Flow:
Check queue
→ Pick job
→ Execute job
→ Repeat
π§ Simple Analogy
| Concept | Real Life |
|---|---|
| Job | Task |
| Queue | To-do list |
| Worker | Employee |
β οΈ Important Production Rule
π In production, queue requires:
php artisan queue:work
β Never run this inside scheduler
π Because:
-
It’s a long-running process
-
Scheduler expects short tasks
β οΈ Laravel 11 & 12 Update
From Laravel 11+:
-
Kernel.phpstructure changed -
Configuration moved toward
bootstrap/app.php
π Scheduler still works the same — but structure differs.
π Environment Setup (Real-World)
π§ͺ Local Development
php artisan schedule:run
php artisan queue:work
β Manual testing
β Debug-friendly
π VPS / Dedicated Server
-
Cron → Scheduler
-
Supervisor → Queue worker
β Best performance
β Recommended setup
π Shared Hosting (Important)
Limitations:
-
No persistent processes
-
No Supervisor
βοΈ Queue Handling in Shared Hosting
Use cron as worker replacement.
β Setup:
* * * * * php /home/username/public_html/artisan queue:work --stop-when-empty
π Full Flow
CRON
↓
schedule:run
↓
Scheduler pushes job
↓
CRON triggers queue worker
↓
Processes jobs
↓
Stops
β οΈ Why --stop-when-empty?
-
Prevents hanging processes
-
Safe for shared hosting
π Environment Summary
| Environment | Setup |
|---|---|
| Local | Manual |
| VPS | Supervisor |
| Shared Hosting | Cron-based |
β Common Reasons Scheduler Fails
-
Cron job missing
-
Wrong artisan path
-
Queue not running
-
Wrong timezone
-
No scheduled tasks
π§ Step-by-Step Fixes
β Fix 1: Add Cron Job
crontab -e
* * * * * php /your-project/artisan schedule:run
β Fix 2: Verify schedule()
$schedule->command('inspire')->everyMinute();
β Fix 3: Test Manually
php artisan schedule:run
β Fix 4: Check Queue Worker
php artisan queue:work
β Fix 5: Check Logs
storage/logs/laravel.log
β Fix 6: Debug Cron Output
* * * * * php artisan schedule:run >> output.log 2>&1
π§ͺ Working Example
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')
->daily()
->withoutOverlapping();
}
π‘ Best Practices
-
Use a single cron job
-
Keep scheduled tasks lightweight
-
Use queues for heavy processing
-
Monitor logs regularly
-
Restart workers after deployment
β Common Mistakes
-
Forgetting cron setup
-
Incorrect PHP path
-
Not running queue worker
-
Misusing scheduler
β FAQs
Why is Laravel scheduler not running?
Because the cron job is missing or misconfigured.
How do I test scheduler?
php artisan schedule:run
Where is scheduler defined?
-
Laravel ≤10 →
Kernel.php -
Laravel 11+ → New structure
Does scheduler need cron?
Yes — always.
Can scheduler run without queue?
Yes, but queued jobs still need workers.
π Conclusion
If your Laravel scheduler is not running, the issue is almost always:
-
Missing cron
-
Queue worker not running
-
Server limitations
Once you understand:
π Cron → Scheduler → Queue → Worker
You can debug and fix any scheduler issue confidently.
π Official Docs:
https://laravel.com/docs/scheduling