comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); // Betriebs-Alert, wenn ein geplanter Task fehlschlägt – an JEDEN Task hängen $alertOnFailure = fn (string $task) => function (Event $event) use ($task): void { OperationalAlert::send("Geplanter Task fehlgeschlagen: {$task}", ['exit_code' => $event->exitCode]); }; Schedule::command('cabinet:reset-overrides') ->dailyAt('00:00') ->withoutOverlapping(10) ->onFailure($alertOnFailure('cabinet:reset-overrides')); // Herzschlag: fällt der Scheduler aus (Cron weg, Server hängt), greift kein // onFailure mehr – dann meldet /health den fehlenden Herzschlag Schedule::command(MonitoringHeartbeat::class) ->everyMinute() ->withoutOverlapping(2) ->onFailure($alertOnFailure('monitoring:heartbeat')); // Fehlgeschlagene Jobs nach 30 Tagen entfernen Schedule::command('queue:prune-failed', ['--hours=720']) ->dailyAt('03:55') ->withoutOverlapping(30) ->onFailure($alertOnFailure('queue:prune-failed'));