Zum Inhalt

Geplante Jobs

Profile können entweder manuell ausgelöst oder per Cron-Plan automatisch gestartet werden. Im Backend siehst Du alle Läufe inklusive Fortschritt und Fehler.

Cron-Plan pro Profil

Im Profil unter Zeitplan den Cron-Ausdruck eingeben. Das Plugin nutzt den Shopware-Standard-Scheduler – wenn Dein Shop den Scheduler nicht laufen hat, läuft auch kein Cron-Plan.

Häufige Beispiele

Ausdruck Zeit Use-Case
0 2 * * * täglich 02:00 nächtlicher Bestands-Import
*/30 * * * * alle 30 Min Lieferant mit hoher Bestand-Volatilität
0 */6 * * * alle 6 Stunden Mittelweg zwischen Aktualität und Last
0 23 * * 5 Freitag 23:00 wöchentlicher Buchhaltungs-Export
0 1 1 * * 1. des Monats 01:00 monatliches Reporting
Vorsicht bei * * * * *

Jede Minute ist meistens Quatsch – Shopware-Scheduler hat eine eigene Tick-Rate (default 60 Sek), und Dein Import ist garantiert nicht so schnell. Realistische Maximalfrequenz: alle 5 Minuten.

Wie der Scheduler funktioniert

Shopware nutzt einen eigenen Scheduler unter bin/console scheduled-task:run. Auf einem produktiven Shop läuft das typischerweise als systemd-Service oder Cron-Job:

* * * * * cd /var/www/shopware && php bin/console scheduled-task:run >> /var/log/shopware-scheduler.log 2>&1

Wenn der Scheduler-Cron nicht läuft, läuft auch das IEP-Profil nicht. Prüfung:

# Aktive Scheduled Tasks
php bin/console scheduled-task:list

# IEP-Scheduler sollte hier auftauchen:
# kommora.iep.run_scheduled_profiles    every 60s    active

Manuelle Auslösung

Egal ob Cron-Plan aktiv oder nicht, jedes Profil lässt sich jederzeit manuell starten:

  • Im Admin: Profile → Profil-Zeile → Button „Jetzt ausführen"
  • Per CLI: php bin/console kommora:iep:run <profile-name-oder-id>

Manuelle Auslösung ignoriert den Cron-Plan und läuft sofort.

Job-Log

Unter Import Export Pro → Job-Log sind alle Läufe protokolliert.

Spalte Bedeutung
Profil welches Profil lief
Modus manuell / cron / cli
Status running, success, partial (mit Fehlern), failed
Gestartet / Beendet Zeitstempel + Laufzeit
Datensätze gelesen / verarbeitet / Fehler
Datei Download des Original-Dokuments

Detailansicht eines Jobs

Klick auf eine Job-Zeile öffnet die Detail-Ansicht:

  • Header mit Profil-Settings zum Lauf-Zeitpunkt (auch wenn das Profil später geändert wurde)
  • Datensatz-Tabelle mit Status pro Datensatz, Fehlermeldung wenn fehlerhaft
  • Original-Datei als Download
  • Aktionen: „Erneut ausführen mit gleichen Settings", „Auf failed-Datensätze einschränken"

Mail-Benachrichtigung

In der globalen Plugin-Konfig kannst Du Mail-Empfänger für Erfolg und Fehler einstellen (Konfiguration).

Die Mail enthält:

  • Profilname, Startzeit, Laufzeit
  • Anzahl Datensätze (gelesen / verarbeitet / Fehler)
  • Bei Fehlern: die ersten 10 Fehlermeldungen
  • Link zum Job-Log im Admin

Mehrere Jobs parallel?

Das Plugin serialisiert standardmäßig: Ein Profil kann nicht parallel zu sich selbst starten (wenn ein Lauf aktiv ist, wird der nächste Cron-Trigger übersprungen + im Log notiert). Verschiedene Profile dürfen parallel laufen, sofern in der globalen Konfig „Max. parallele Jobs" > 1 ist.

Parallelität und DB-Locks

Bei vielen Datensätzen + parallelen Jobs können DB-Locks auftreten (bsd. wenn beide Profile dieselben Produkte schreiben). Empfehlung: Max. parallele Jobs = 1 lassen, es sei denn die Profile haben klare disjunkte Daten-Sets.

Job-Wiederholung bei Fehlern

Das Plugin macht keinen automatischen Retry. Wenn ein Job fehlschlägt, bleibt die Datei im Fehler-Verzeichnis liegen, der nächste Cron-Lauf startet einen neuen Job mit der nächsten verfügbaren Datei (oder bricht ab, wenn keine da).

Manuelle Re-Runs:

  • Job-Detail-Seite → „Erneut ausführen": gleicher Datensatz, gleiches Profil
  • Job-Detail-Seite → „Nur Fehlerdatensätze re-importieren": extrahiert die Fehler-Zeilen in eine neue Datei und führt nur die aus

Performance bei großen Datenmengen

Empfehlungen für Importe > 100.000 Datensätze:

  • Batch-Größe in globaler Konfig auf 1.000–2.000 erhöhen
  • PHP-CLI-Memory auf 1–2 GB
  • DB-Indexe prüfen: productNumber, ean sollten indexiert sein (standardmäßig sind sie es)
  • Detail-Logging auslassen – schreibt sonst pro Datensatz eine Log-Zeile

Weiter