Zum Hauptinhalt springen

Cron-Jobs und Hintergrund-Aufgaben

SpeamCore hat automatisierte Hintergrund-Aufgaben — sie laufen ohne dass jemand klickt, halten das System aktuell und erinnern an Termine.

Drei Job-Systeme im Überblick

Statische Cron-Tasks (server.ts, Stand 2026-05-05)

Diese sind in src/server.ts per cron.schedule(...) hardcoded — Frequenzen können nur durch Code-Deploy geändert werden:

TaskCron-ExpressionFrequenzWas tut er?
masterStatusTask*/5 * * * *alle 5 minMaster-Service-Status-Check
dataTransferPollTask*/5 * * * *alle 5 minPending DataTransfer-Imports verarbeiten
roleMailboxSyncTask0 * * * *stündlichRollen-Mailbox-Regeln syncen
unitSyncTask0 2 * * *täglich 02:00Unit + HsCode-Sync
complianceCheckTask0 2 * * *täglich 02:00Tägliche Compliance-Checks erzeugen
chatCleanupTask15 3 * * *täglich 03:15Leere Chats löschen

BullMQ-Worker (asynchrone Verarbeitung, Redis-basiert)

Aus src/workers/:

WorkerZweck
document-content-extraction-workerText aus PDFs / Office-Dokumenten extrahieren
mail-sync-workerImap/Graph-Mail-Synchronisation
hs-code-classification-workerHS-Code-Klassifikation für Produkte
translation-queue-workeri18n-Übersetzungen verarbeiten
elasticsearch-sync-workerSearch-Index aktualisieren
contact-enrichment-workerKontaktdaten anreichern

Erfolg vs Fehler

Jeder Job-Lauf wird im Cron-Logs protokolliert:

  • Job-Name
  • Start + Ende
  • Status (success / error / partial)
  • Verarbeitete Datensätze
  • Fehler-Meldung (falls error)

Idempotenz — wichtig!

Alle Jobs müssen idempotent sein — mehrfache Ausführung darf nicht zu doppelten Effekten führen.

Beispiele aus dem Code:

  • complianceCheckTask läuft 2x am gleichen Tag → findOrCreate in der Engine verhindert doppelte Compliance-Einträge (Default-Datum „gestern" bleibt stabil)
  • dataTransferPollTask läuft auf vergangene Imports → bereits-verarbeitete bekommen processedAt-Flag und werden geskippt
  • mail-sync-worker läuft auf gleiche Mail-Konten → IMAP-UID-Tracking verhindert doppelten Import

Bei Job-Fehler

Manueller Trigger (User-CronJobs)

Die im UI angelegten User-Cron-Jobs unter /cron-jobs haben drei manuelle Aktionen (verifiziert in cronJob.router.ts):

  • POST /api/cron-jobs/:id/execute — Job sofort ausführen
  • POST /api/cron-jobs/:id/simulate — Trockenlauf ohne Effekt
  • POST /api/cron-jobs/:id/generate-actions — Actions aus Konfiguration neu erzeugen

Statische server.ts-Cron-Tasks haben keinen UI-Trigger — Änderungen erfordern Code-Deploy.

Wann nützlich?

  • Vor wichtigen Berichten (BWA, Compliance-Stichtag)
  • Nach System-Wartung („alle User-Cron-Jobs neu anstoßen")
  • Bei Tests von Job-Konfigurations-Änderungen

Verzögerte Jobs (BullMQ-Queues)

Manche Aufgaben sind nicht zeitgesteuert, sondern werden in eine BullMQ-Queue geschoben (Redis-basiert). Konkrete Queues entsprechen den Workers in src/workers/:

  • document-content-extraction — Volltext-Extraktion nach Datei-Upload
  • mail-sync — Mail-Sync nach Verbindungs-Anfrage
  • hs-code-classification — Klassifikation nach Produkt-Anlage
  • translation-queue — i18n-Strings übersetzen
  • elasticsearch-sync — Search-Index aktualisieren
  • contact-enrichment — Kontaktdaten anreichern

Queue-Worker arbeiten Aufgaben in Reihenfolge ab, mit Retry-Logik bei Fehlern (BullMQ-Standard mit exponentieller Backoff-Strategie).

Performance-Effekt

Schwere Jobs (z.B. Inventur-Stichtag bei 100k Produkten) laufen nachts — geringer User-Impact. Light-Jobs (Notification, Health-Check) laufen häufig, aber kurz.

Wichtige Stunden (System-Last):

  • 06:00-18:00 — User-Aktivität, leichte Jobs
  • 18:00-06:00 — Heavy Jobs erlaubt

Anti-Pattern

  • Job ohne Idempotenz — bei Re-Run doppelte Effekte
  • Job ohne Logging — bei Fehler nicht nachvollziehbar
  • Job ohne Timeout — kann ewig hängen, Folge-Jobs blockieren
  • Synchroner Versand an alle MAs in einem Job — bei 1000 MAs 30+ min, blockiert Folge-Jobs
  • Audit-Log löschen in einem Job — gesetzeswidrig

KI-Chat-Anwendungen

Welche Cron-Jobs sind in den letzten 7 Tagen mit Fehler gelaufen?
Mit Job-Name, Häufigkeit und letzter Fehler-Meldung.
Welche Jobs haben die längsten durchschnittlichen Laufzeiten?
Mit Trend gegenüber letztem Monat.

Verwandte Doku