Determine whether the task was selected
For the owner whose scheduled report or notification disappeared, separate the scheduler selecting a task from a queue worker completing it. On an authorised copy, inspect schedule:list and the task's next due time. Ask the host operator to inspect the existing minute-level scheduler invocation, working directory and application revision. A task listed in source is not proof the host evaluated it.
- Record expected time, actual last result and relevant timezone.
- Check the installed Laravel version; this guide cites 12.x, not a claim that all versions configure schedules identically.
Check eligibility before adding another cron entry
Inspect environment constraints, maintenance mode and conditional skip rules. Laravel warns that daylight-saving changes can make timezone-scheduled tasks run twice or not at all. Several long tasks scheduled at the same time can also delay those behind them. Fix the identified condition; a second scheduler invocation can create duplicates rather than recover the missing business result.
- If the task dispatches a job, continue into the named queue and worker evidence.
- Do not invoke schedule:run or a task command against production merely as a diagnostic: it may perform real work.
Distinguish overlap from multiple servers
withoutOverlapping prevents a task from starting while its cache lock is held. onOneServer addresses schedulers on multiple servers and needs the documented supported shared central cache. A stuck lock and a legitimately running task require different actions. Do not clear locks until the authorised operator confirms that earlier work is no longer running and assesses any partial external effects.
- Inventory every host currently evaluating the same schedule.
- Inspect the lock lifetime against observed task duration instead of guessing a tiny expiry.
Acceptance is the scheduled business result
On an agreed synthetic route, show one expected selection, one completed result and a visible controlled failure. If multi-host or overlap protection is in scope, exercise that case separately. Missing historical notifications or invoices need reconciliation before replay, not an automatic backfill. Send redacted timing and task context initially; a new recurring operation, live account action and price need their own proposal.
Sources and limits
- Laravel 12.x: task scheduling Checked 2026-10-10.
- schedule:list shows scheduled tasks and next execution times; the production scheduler normally evaluates schedule:run every minute.
- Maintenance mode, environment constraints and timezone or daylight-saving changes can affect whether a task runs.
- withoutOverlapping uses cache locks; onOneServer requires supported shared central cache configuration.