Laravel 5 schedule not working
Stefan Bogdanescu
Founder & Senior Architect · 2026-06-29
Mastering Laravel Scheduling: Troubleshooting the schedule:run Mystery
Setting up scheduled tasks is a fundamental requirement for many applications, allowing you to perform recurring jobs without manual intervention. However, when developers dive into older frameworks like Laravel 5 and encounter issues with the scheduler—specifically when php artisan schedule:run returns "No scheduled commands are ready to run"—it can feel like hitting a roadblock.
This post dives deep into the common pitfalls encountered when configuring Laravel scheduling, addresses the specific issues found in your scenario, and provides robust solutions rooted in best practices. We will dissect why your setup might have failed and show you the correct, reliable way to schedule tasks.
The Anatomy of a Broken Scheduler Setup
You've provided a detailed breakdown of your attempt, involving cron jobs, modifications to Kernel.php, and attempts to use dynamic method calls like $schedule->call(...). When scheduling fails, it is rarely an issue with the cron command itself (though that is a common culprit), but rather how Laravel resolves the scheduled jobs within the application context.
The core issues often stem from three areas: environment configuration, class referencing syntax, and understanding the scheduler's lifecycle.
1. Cron Job Execution Context
First, let’s address the cron setup. While your command structure is standard for running Artisan commands via cron (php artisan schedule:run), the execution environment must be perfect. If you are running this on a remote server (like Cloud9), ensure that the PHP environment variables and path settings are correct.
Best Practice: Always test the cron job manually outside of the crontab to ensure the command executes successfully when run directly. If it fails there, the issue is environmental, not Laravel-specific.
2. Correcting Scheduler Implementation in Kernel.php
The way you define scheduled tasks within the schedule(Schedule $schedule) method is crucial. In modern Laravel applications (and this principle applies to Laravel 5), you should use the fluent syntax provided by the $schedule object to define recurring events directly against specific commands or closures, rather than attempting complex dynamic calls inside that method for simple scheduling.
Your attempt using $schedule->call('ApiController@test_job') is an advanced pattern, but it often leads to issues if the necessary classes or facades aren't correctly loaded or if the scheduler expects a simpler definition.
Here is how you should structure your scheduled tasks in app/Console/Kernel.php:
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/