Laravel Scheduler Monitoring
Know when Laravel's scheduler stops firing.
PingCron monitors artisan schedule:run and your individual scheduled tasks. If the scheduler stops running or a task silently fails, you get alerted within seconds.
5 monitors free · No credit card · Live in under 60 seconds
Laravel's scheduler depends on one cron entry that's easy to forget.
Laravel's scheduler runs through a single cron entry that fires php artisan schedule:run every minute. If that cron entry stops working — server reboot, deploy script removed it, cron daemon crashed, PHP path changed — every scheduled task in your app silently stops running.
Laravel won't tell you. Your jobs just stop firing. ProcessOrders never runs. SendDailyReports never runs. CleanupExpiredSessions never runs. Your app keeps serving requests like nothing's wrong, but the entire scheduled workload has flatlined.
Most teams find out days later — when a customer asks why they didn't get their weekly summary, or when the database fills up because cleanup stopped running.
Laravel scheduler failure modes:
- Server rebooted and the cron entry for schedule:run was never restored
- Deploy overwrote the crontab without re-adding the scheduler line
- PHP path changed after an upgrade — cron can't find the binary anymore
- Composer dependencies broke after an update, schedule:run throws on boot
- Database connection in scheduled context fails (different env from web)
- A withoutOverlapping() lock got stuck and is silently blocking every run
Setup
Monitor schedule:run with one ping per minute.
Add a curl after schedule:run in your crontab. If Laravel stops running schedules — for any reason — PingCron alerts you.
Before
* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1
After
* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1 && curl -fsS https://api.pingcron.io/ping/abc123
Set the monitor schedule to '1m' with a 30-second grace period. PingCron expects a ping every minute — if the scheduler stops firing, you'll know within 90 seconds.
Real-world examples
Monitor a specific scheduled task with thenPing()
// app/Console/Kernel.php
$schedule->command('reports:daily')
->dailyAt('09:00')
->thenPing('https://api.pingcron.io/ping/abc123');Monitor with start/finish/failure pings
$schedule->command('emails:send')
->everyFiveMinutes()
->pingBefore('https://api.pingcron.io/ping/abc123/start')
->thenPing('https://api.pingcron.io/ping/abc123')
->pingOnFailure('https://api.pingcron.io/ping/abc123/fail');Inside a Laravel job
use Illuminate\Support\Facades\Http;
public function handle()
{
// your job logic
Http::get('https://api.pingcron.io/ping/abc123');
}What Laravel scheduled tasks should you monitor?
Anything in app/Console/Kernel.php that has to run.
schedule:run heartbeat
The single cron entry that powers everything else.
Daily reports
reports:generate, customer summaries, internal digests.
Billing commands
subscriptions:bill, invoices:send, payments:retry.
Database maintenance
horizon:purge, queue:prune, custom DB cleanups.
Cache + session cleanup
cache:prune-stale-tags, session:gc, telescope:prune.
Sync jobs
CRM sync, Stripe webhook backfills, search indexing.
Backup commands
spatie/laravel-backup, custom export commands.
Notification dispatchers
Daily digests, reminder emails, scheduled SMS.
How it works
Three minutes from clone to first alert.
Create a Laravel scheduler monitor
Set the interval to every minute with a 30s grace period.
Add the ping to your schedule:run cron line
Append && curl ... to your existing schedule:run entry.
Optionally monitor individual tasks
Use Laravel's built-in thenPing(), pingBefore(), and pingOnFailure() helpers for granular task monitoring.
Get alerted on any scheduler failure
Email, Slack, Discord, or webhook the moment a check-in is missed.
Alerts where you'll actually see them.
Configure as many channels as you want per monitor.
HTML alerts with monitor details and direct links.
Slack
Post to any Slack channel via incoming webhook.
Discord
Native Discord webhook integration.
Custom webhooks
POST alerts to any endpoint with full payload.
FAQ
Stop assuming Laravel scheduler is running.
One ping per minute confirms every scheduled task in your app is firing.
Start monitoring free5 monitors free · No credit card · Live in under 60 seconds