forked from fa/breadcrumb-the-shire
2.2 KiB
2.2 KiB
Geplante Aufgaben
Letzte Aktualisierung: 2026-02-24
Ziel
Scheduler-Betrieb und Job-Erweiterung kurz und verlässlich dokumentieren.
Kernkomponenten
- Runner:
bin/scheduler-run.php - Orchestrierung:
lib/Service/Scheduler/SchedulerRunService.php - Job-Konfiguration:
lib/Service/Scheduler/ScheduledJobService.php - Registry:
lib/Service/Scheduler/ScheduledJobRegistry.php - Schedule-Berechnung:
lib/Service/Scheduler/ScheduleCalculator.php
Datenmodell
scheduled_jobs: Job-Konfiguration und letzter Laufstatusscheduled_job_runs: Historie einzelner Läufescheduler_runtime_status: Heartbeat/Runner-Status (eine Zeile,id = 1)
Retention:
- Run-Logs: 90 Tage (
ScheduledJobService::purgeRunsExpired) - System-Audit: konfigurierbar über
system_audit_retention_days(Jobsystem_audit_purge)
Laufmodell
- Runner startet und synchronisiert Registry-Jobs (
ensureSystemJobs). - Globaler MySQL-Lock wird gesetzt (
scheduled_jobs_runner). - Fällige Jobs (
enabled=1,next_run_at <= now) werden abgearbeitet. - Jeder Lauf wird als
success/failed/skippedprotokolliert. next_run_atwird neu berechnet.- Heartbeat wird aktualisiert, Lock wird freigegeben.
Scheduling
Unterstützt:
hourly(1..24)daily(1..365 + Uhrzeit)weekly(1..52 + Uhrzeit + Wochentage)
catchup_once steuert Nachholverhalten:
1: genau ein Nachhol-Lauf, danach normal weiter0: kein Backlog-Sturm, verpasste Fenster werden übersprungen
Rechte
jobs.view: Übersicht sehenjobs.manage: Job speichernjobs.run_now: Job manuell starten- Purge der Run-Logs:
settings.update
Registrierte Core-Jobs:
user_lifecycle_runsystem_audit_purge
Neuen Job registrieren (kurz)
- Handler in
lib/Service/Scheduler/Handler/*erstellen (ScheduledJobHandlerInterface). - Job-Key + Handler in
ScheduledJobRegistryergänzen. - Abhängigkeiten in
SchedulerServicesFactoryverdrahten.
Danach wird der Job bei ensureSystemJobs() automatisch in scheduled_jobs angelegt.
Troubleshooting
lock_not_acquired: ein anderer Runner läuft.- Job bleibt
running: stale-running Schutz greift nach 2 Stunden. - Job läuft nicht:
enabled,next_run_at,timezone, Schedule prüfen.