1
0
Files
breadcrumb-the-shire/docs/howto-geplante-aufgaben.md

75 lines
2.2 KiB
Markdown
Raw Normal View History

# Geplante Aufgaben
Letzte Aktualisierung: 2026-03-06
## Ziel
2026-03-04 15:56:58 +01:00
Scheduler-Betrieb und Job-Erweiterung kurz und verlässlich dokumentieren.
2026-03-04 15:56:58 +01:00
## Kernkomponenten
- Runner: `bin/console scheduler:run`
- Orchestrierung: `core/Service/Scheduler/SchedulerRunService.php`
- Job-Konfiguration: `core/Service/Scheduler/ScheduledJobService.php`
- Registry: `core/Service/Scheduler/ScheduledJobRegistry.php`
- Schedule-Berechnung: `core/Service/Scheduler/ScheduleCalculator.php`
2026-03-04 15:56:58 +01:00
## Datenmodell
2026-03-04 15:56:58 +01:00
- `scheduled_jobs`: Job-Konfiguration und letzter Laufstatus
- `scheduled_job_runs`: Historie einzelner Läufe
- `scheduler_runtime_status`: Heartbeat/Runner-Status (eine Zeile, `id = 1`)
2026-03-04 15:56:58 +01:00
Retention:
2026-03-04 15:56:58 +01:00
- Run-Logs: 90 Tage (`ScheduledJobService::purgeRunsExpired`)
- System-Audit: konfigurierbar über `system_audit_retention_days` (Job `system_audit_purge`)
2026-03-04 15:56:58 +01:00
## Laufmodell
2026-03-04 15:56:58 +01:00
1. Runner startet und synchronisiert Registry-Jobs (`ensureSystemJobs`).
2. Globaler MySQL-Lock wird gesetzt (`scheduled_jobs_runner`).
3. Fällige Jobs (`enabled=1`, `next_run_at <= now`) werden abgearbeitet.
4. Jeder Lauf wird als `success`/`failed`/`skipped` protokolliert.
5. `next_run_at` wird neu berechnet.
6. Heartbeat wird aktualisiert, Lock wird freigegeben.
2026-03-04 15:56:58 +01:00
## Scheduling
2026-03-04 15:56:58 +01:00
Unterstützt:
2026-03-04 15:56:58 +01:00
- `hourly` (1..24)
- `daily` (1..365 + Uhrzeit)
- `weekly` (1..52 + Uhrzeit + Wochentage)
2026-03-04 15:56:58 +01:00
`catchup_once` steuert Nachholverhalten:
2026-03-04 15:56:58 +01:00
- `1`: genau ein Nachhol-Lauf, danach normal weiter
- `0`: kein Backlog-Sturm, verpasste Fenster werden übersprungen
2026-03-04 15:56:58 +01:00
## Rechte
2026-03-04 15:56:58 +01:00
- `jobs.view`: Übersicht sehen
- `jobs.manage`: Job speichern
- `jobs.run_now`: Job manuell starten
- Purge der Run-Logs: `settings.update`
2026-02-23 12:58:19 +01:00
2026-03-04 15:56:58 +01:00
Registrierte Core-Jobs:
2026-03-04 15:56:58 +01:00
- `user_lifecycle_run`
- `system_audit_purge`
2026-03-04 15:56:58 +01:00
## Neuen Job registrieren (kurz)
1. Handler in `core/Service/Scheduler/Handler/*` erstellen (`ScheduledJobHandlerInterface`).
2026-03-04 15:56:58 +01:00
2. Job-Key + Handler in `ScheduledJobRegistry` ergänzen.
3. Abhängigkeiten in `SchedulerServicesFactory` verdrahten.
2026-03-04 15:56:58 +01:00
Danach wird der Job bei `ensureSystemJobs()` automatisch in `scheduled_jobs` angelegt.
## Troubleshooting
2026-03-04 15:56:58 +01:00
- `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.