Introduction to Laravel Scheduler Not Running
If you're dealing with the frustrating issue of Laravel Scheduler Not Running, you're not alone. Many developers face this problem when scheduled tasks like emails, backups, or reports fail to execute.
Laravel’s scheduler is powerful, but it depends heavily on proper server configuration. If something is slightly off, your scheduled tasks simply won’t run.
In this guide, you’ll learn why Laravel scheduler fails and how to fix it step by step.
How Laravel Scheduler Works
Understanding how the scheduler works will help you debug faster.
What is Laravel Scheduler
Laravel Scheduler allows you to define scheduled tasks in one place:
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')->daily();
}
Instead of managing multiple cron entries, Laravel uses one cron job.
Role of Cron Job
Laravel relies on this cron job:
* * * * * php /path-to-project/artisan schedule:run >> /dev/null 2>&1
This runs every minute and triggers scheduled tasks.
Common Reasons Laravel Scheduler Not Running
Let’s break down the real causes.
Cron Job Not Configured
If you don’t add the cron job, scheduler will never run.
schedule:run Not Executing
Even if cron exists, it may:
-
point to wrong PHP path
-
have permission issues
Wrong Server Timezone
Tasks may run at wrong times or never appear to run.
Task Not Defined Properly
If your Kernel.php has no schedule:
protected function schedule(Schedule $schedule)
{
// empty
}
Nothing will run.
Queue Not Running
If your scheduled job dispatches a queue:
$schedule->job(new ProcessData());
Queue worker must be running.
Laravel Scheduler Not Running – Step-by-Step Fixes
Here are proven fixes.
Fix 1: Add Cron Job
Run:
crontab -e
Add:
* * * * * php /your-project-path/artisan schedule:run >> /dev/null 2>&1
Fix 2: Check schedule() Method
Ensure:
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')->everyMinute();
}
Fix 3: Test schedule:run Manually
php artisan schedule:run
If nothing runs → problem in schedule definition.
Fix 4: Verify Timezone
Check:
config/app.php
'timezone' => 'UTC',
Match it with server timezone.
Fix 5: Check Logs
storage/logs/laravel.log
Look for:
-
command errors
-
exceptions
Fix 6: Ensure Queue Worker Running
Run:
php artisan queue:work
Without this, queued scheduled jobs fail.
Fix 7: Use withoutOverlapping() Carefully
If you used:
->withoutOverlapping()
It may block execution if previous job didn’t finish.
Fix 8: Restart Scheduler Services
Restart server services:
sudo systemctl restart cron
sudo systemctl restart php8.2-fpm
Fix 9: Debug with Output
Modify cron:
* * * * * php artisan schedule:run >> output.log 2>&1
Check logs for errors.
Real Working Laravel Scheduler Example
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')
->daily()
->withoutOverlapping();
}
Cron:
* * * * * php /var/www/project/artisan schedule:run >> /dev/null 2>&1
Best Practices for Laravel Scheduling
-
Use one cron job only
-
Keep tasks lightweight
-
Log important jobs
-
Use queues for heavy tasks
-
Monitor failures
Common Developer Mistakes
-
Forgetting cron job
-
Wrong artisan path
-
Not running queue worker
-
Wrong timezone
-
Silent failures
FAQs
Why Laravel scheduler not running?
Because cron job is missing or misconfigured.
How do I test scheduler?
php artisan schedule:run
Where is scheduler defined?
app/Console/Kernel.php
Does scheduler need cron?
Yes — it depends on cron.
Can scheduler run without queue?
Yes, but queued jobs require workers.
How often does scheduler run?
Every minute via cron.
Conclusion
The Laravel Scheduler Not Running issue is usually caused by missing cron jobs, incorrect configuration, or server-level issues.
By following these fixes, you can quickly debug and ensure your scheduled tasks run reliably in production.
For more Laravel scheduling details:
👉 https://laravel.com/docs/scheduling