Laravel
The Laravel scheduler can report on its own — one line of setup.
The scheduler has built-in pingBefore, thenPing and pingOnFailure hooks. No separate script needed.
use Illuminate\Support\Facades\Schedule;
Schedule::command('reports:build')
->dailyAt('03:00')
->timezone('Europe/Moscow')
->withoutOverlapping()
->pingBefore(config('services.tickwatch.ping') . '/start')
->thenPing(config('services.tickwatch.ping'))
->pingOnFailure(config('services.tickwatch.ping') . '/fail');'tickwatch' => [
'ping' => env('TICKWATCH_PING'),
],A separate concern: the scheduler itself
All these hooks go silent at once if schedule:run stops being called — the most common breakage in Laravel projects: the crontab line got lost during a server move. Add a separate one-minute-interval monitor for the scheduler itself.
* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1 && curl -fsS -m 5 https://ping.tickwatch.dev/YOUR-KEY > /dev/null