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,eansollten indexiert sein (standardmäßig sind sie es) - Detail-Logging auslassen – schreibt sonst pro Datensatz eine Log-Zeile
Weiter¶
- FAQ
- Troubleshooting – wenn Jobs nicht starten oder fehlschlagen