Laravel Job Monitoring

Monitor Laravel scheduled commands and queued jobs

Laravel's scheduler is powerful, but when an Artisan command throws an exception or the worker process crashes, you're left digging through logs. Cronping integrates in one line and alerts you the moment a job fails or misses its schedule.

app/Console/Kernel.php
$schedule->command('orders:reconcile')
    ->dailyAt('23:55')
    ->thenPing('https://ping.cronping.com/YOUR_TOKEN')
    ->pingOnFailure('https://ping.cronping.com/YOUR_TOKEN/fail');

$schedule->command('reports:generate')
    ->weekdays()
    ->at('06:00')
    ->pingBefore('https://ping.cronping.com/YOUR_REPORT_TOKEN/start')
    ->thenPing('https://ping.cronping.com/YOUR_REPORT_TOKEN');

One line added to your script. Cronping handles the rest.

The cost of silent failures

Silent command exceptions

Laravel swallows exceptions in scheduled commands by default. Your job throws a PDOException at 3am. The scheduler logs it and moves on. You find out at 9am.

Queue worker crashes

Horizon or Supervisor restarts. Jobs pile up or get silently dropped. Your nightly reconciliation never ran — but the cron log shows nothing wrong.

Timezone-sensitive schedule drift

Commands must run at exactly 23:59 for daily reports. A server timezone misconfiguration or DST transition causes them to run at the wrong time — or not at all.

Jobs that complete but do nothing

The command exits 0 but wrote zero rows to the database. No exception, no error. Laravel reports success. The actual job accomplished nothing.

Set up in under 2 minutes

  1. 1

    Create a heartbeat

    Set up a heartbeat in Cronping matching your Artisan command's schedule — e.g., "daily at 23:55". Give it a meaningful name like "Orders Reconciliation".

  2. 2

    Add thenPing() to your schedule

    Laravel's task scheduler has built-in URL ping support. Add `thenPing()` and `pingOnFailure()` to your command definition in Kernel.php — no extra packages needed.

  3. 3

    Get alerted immediately

    If the command fails, throws an exception, or doesn't run in time, Cronping alerts your team via Slack, email, PagerDuty, or your webhook.

Everything you need

No SDK, no dashboard agent, no infrastructure to manage.

Native Laravel support

Laravel's `thenPing()`, `pingBefore()`, and `pingOnFailure()` methods work directly with Cronping URLs. No package to install.

Failure vs. success distinction

Separate URLs for successful completion and explicit failure. Know whether a job didn't run vs. ran and threw an exception.

Run duration tracking

Use `pingBefore()` to signal start and `thenPing()` for completion. Track how long each command takes and get alerted on duration spikes.

90-day execution history

Full history of every command run — when it started, how long it took, whether it succeeded. Replace log-digging with a clean timeline.

Multi-channel alerts

Alert the backend team on Slack, the on-call engineer via PagerDuty, and stakeholders via email — all from the same heartbeat.

Per-environment heartbeats

Create separate heartbeats for production, staging, and workers in each region. Monitor all environments from a single dashboard.

Frequently asked questions

Yes. Laravel's task scheduler includes `thenPing($url)`, `pingBefore($url)`, and `pingOnFailure($url)` methods that call any URL. Point them at your Cronping heartbeat URLs — no package installation required.

Use `->pingBefore('https://ping.cronping.com/YOUR_TOKEN/start')` to signal the job started and `->thenPing('https://ping.cronping.com/YOUR_TOKEN')` to signal completion. Cronping will alert you if the job runs beyond the expected duration.

Yes. Create a scheduled command that acts as a health check for your queue — checking queue size, last processed time, or worker count — and ping Cronping from it. If the queue is unhealthy or the command doesn't run, you'll be alerted.

Add the Cronping ping at the end of the `handle()` method in your job class. For failure cases, add it to the `failed()` method with the /fail URL. This works for both sync and async queue drivers.

Cronping works with Laravel Vapor. Your serverless functions can make outbound HTTP calls, so pinging Cronping from a scheduled Lambda function works the same way as from a traditional server.

Stop discovering failures when it's too late.

Free to start. No credit card required. Add your first heartbeat in under 5 minutes.