Skip to main content

Laravel Scheduler Not Running? Fix Cron, Queue & Worker Issues (Complete 2026 Guide)

Laravel scheduler not running? Learn how to fix cron, queue, and worker issues step-by-step. Includes Laravel 12 updates and shared hosting solutions.

โ€ข โ€ข 4 min read
Laravel Scheduler Not Running? Fix Cron, Queue & Worker Issues (Complete 2026 Guide)

Laravel Scheduler Not Running? Fix It Fast (Step-by-Step Guide for 2026)

๐Ÿ” Introduction

If your Laravel scheduler is not running, scheduled tasks like emails, backups, or reports won’t execute — and this can break your application silently.

This is one of the most common Laravel production issues.

๐Ÿ‘‰ The root cause is usually:

  • Missing cron job

  • Queue not running

  • Server misconfiguration

In this guide, you’ll learn exactly how Laravel scheduler works, why it fails, and how to fix it in local, VPS, and shared hosting environments.


โฐ What is Laravel Scheduler?

Laravel Scheduler allows you to define 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 (Simple Explanation)

Laravel scheduler depends 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?

Cron expression:

* * * * *

๐Ÿ‘‰ Means:

๐Ÿ‘‰ Run command every minute


๐Ÿ” What Happens Internally?

Every minute:

  1. Cron runs schedule:run

  2. Laravel checks scheduled tasks

  3. Executes due tasks


๐Ÿ“Š Example Timeline

Time Action
10:00 Cron triggers scheduler
10:01 Runs again
10:02 Runs again

โš ๏ธ 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 task like:

  • Send email

  • Process data

  • Generate report


๐Ÿ“‹ Queue (Task List)

Queue stores jobs before execution.

๐Ÿ‘‰ Think: to-do list


๐Ÿ‘ท Worker (Executor)

Worker processes jobs:

php artisan queue:work

Worker flow:

Check queue
→ Pick job
→ Execute job
→ Repeat forever

๐Ÿง  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 & Laravel 12 Update

Starting from Laravel 11 and Laravel 12:

๐Ÿ‘‰ Kernel.php is removed


๐Ÿš€ New Structure

Instead of:

app/Console/Kernel.php

Laravel now uses:

bootstrap/app.php

Example:

->withMiddleware(function (Middleware $middleware) {
   $middleware->append(\App\Http\Middleware\YourMiddleware::class);
})

๐Ÿ‘‰ Scheduler still exists, but internal structure changed.


๐Ÿ” Environment Setup (Local vs Production)


๐Ÿงช Local Development

php artisan schedule:run
php artisan queue:work

โœ” Manual testing


๐Ÿš€ 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


โœ… Cron Worker 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 Laravel Scheduler Not Running

  • Cron job missing

  • Wrong artisan path

  • Queue not running

  • Wrong timezone

  • Empty schedule


๐Ÿ”ง Step-by-Step Fixes


โœ… Fix 1: Add Cron Job

crontab -e
* * * * * php /your-project/artisan schedule:run

โœ… Fix 2: Check schedule() Method

$schedule->command('inspire')->everyMinute();

โœ… Fix 3: Test Manually

php artisan schedule:run

โœ… Fix 4: Check Queue

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 one cron job

  • Keep jobs lightweight

  • Use queues for heavy tasks

  • Monitor logs

  • Restart workers after deploy


โŒ Common Mistakes

  • Forgetting cron

  • Wrong PHP path

  • Not running queue worker

  • Using scheduler incorrectly


โ“ FAQs (Optimized for Featured Snippets)

Why is Laravel scheduler not running?

Because 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/12 → New structure


Does scheduler need cron?

Yes — always.


Can scheduler run without queue?

Yes, but queued jobs 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 fix any scheduler issue confidently.


๐Ÿ‘‰ Official Docs: https://laravel.com/docs/scheduling