Laravel

Monitoring for the Laravel scheduler

Laravel’s scheduler is elegant, but it hangs on a single point of failure: one system cron entry running `schedule:run` every minute. If that entry is removed, the server is down, or `schedule:run` itself errors, every scheduled task stops — and Laravel will not tell you. The good news: Laravel has built-in ping hooks that make heartbeat monitoring a one-liner.

How Laravel scheduling works

You define tasks in the scheduler, and a single crontab line drives all of them: `* * * * * cd /path && php artisan schedule:run >> /dev/null 2>&1`. Laravel decides each minute which tasks are due. That single line is both the strength and the risk.

Why it fails silently

If that one cron entry disappears in a server rebuild, or the box is down, none of your scheduled tasks run and nothing errors — Laravel never even gets invoked. Per-task failures are just as quiet unless you have wired up alerting.

Ping on success with built-in hooks

Laravel ships with `pingOnSuccess()` / `thenPing()` (and `pingBefore()`), which call a URL after a task runs. Point them at a Cronmint heartbeat:

routes/console.php (or app/Console/Kernel.php)
use Illuminate\Support\Facades\Schedule;

Schedule::command('reports:send')
    ->daily()
    ->pingOnSuccess('https://cronmint.com/ping/YOUR-TOKEN');

Also monitor the master cron

Per-task pings do not fire if `schedule:run` itself never runs. Add one more heartbeat that the master cron hits every minute, so a missing system cron entry is caught too.

Monitor your Laravel scheduler

5 jobs free, no card. Set up your first monitor in about 30 seconds.

Start free

Frequently asked questions

How do I monitor Laravel scheduled tasks?

Use Laravel’s built-in pingOnSuccess()/thenPing() to hit a heartbeat URL after a task runs, and create a matching monitor. A missing ping means a failed or missed task and triggers an alert.

What if the schedule:run cron entry is missing?

Add a separate heartbeat that the master cron line pings every minute. If that system cron stops, its check-in stops, and you are alerted even though no task-level error occurred.

Do I need a package for this?

No. Laravel’s scheduler already includes the ping hooks, and Cronmint just needs a URL — no extra Composer package required.