Shopware Problemlösung

Shopware Cronjobs prüfen

Scheduled Tasks, Message Queue, Exporte oder andere Hintergrundprozesse laufen nicht automatisch. Diese Anleitung zeigt, wie Shopware-Cronjobs, PHP-Pfad, Arbeitsverzeichnis, Benutzerrechte, Ausführungsintervalle, Logausgaben und parallele Prozesse systematisch geprüft werden.

Fehlerbild

Shopware-Aufgaben funktionieren manuell, werden aber nicht regelmäßig und automatisch ausgeführt.

Häufige Ursache

Falscher PHP-Pfad, falsches Arbeitsverzeichnis, ungeeigneter Benutzer oder fehlerhafte Cronjob-Syntax.

Wichtig

Cronjobs nur mit vollständigen Pfaden und sichtbarer Fehlerausgabe testen. Danach erst Logausgaben verwerfen.

Inhaltsverzeichnis

  1. Bedeutung von Cronjobs
  2. Cronjob, Scheduled Tasks und Queue
  3. Befehl manuell testen
  4. PHP-Pfad prüfen
  5. Arbeitsverzeichnis prüfen
  6. Cronjob-Benutzer prüfen
  7. Vorhandene Cronjobs anzeigen
  8. Cronjob-Syntax prüfen
  9. Fehlerausgabe protokollieren
  10. Parallele Aufrufe vermeiden
  11. Hosting-Oberflächen beachten
  12. Dauerhaften Betrieb einrichten
  13. Abschlusskontrolle

1. Welche Aufgabe ein Cronjob übernimmt

Ein Cronjob startet einen festgelegten Befehl zu bestimmten Zeiten oder in regelmäßigen Abständen. In selbst gehosteten Shopware-Installationen werden damit häufig Scheduled Tasks, Message Queue, Cache-Pflege, Datenimporte oder individuelle Erweiterungsprozesse gestartet.

Der Cronjob selbst erledigt die fachliche Shopware-Aufgabe nicht. Er startet lediglich den vorgesehenen CLI-Befehl. Ist dieser Befehl falsch, endet der Cronjob ohne die erwartete Wirkung.

Manuell erfolgreich, automatisch fehlerhaft

Läuft ein Shopware-Befehl in der SSH-Konsole korrekt, aber nicht als Cronjob, liegt die Ursache meistens in Pfad, Umgebung, Benutzer, Zeitplan oder Fehlerumleitung.

2. Cronjob, Scheduled Tasks und Message Queue unterscheiden

Bestandteil Aufgabe Typischer Befehl
Cronjob Startet Befehle nach einem Zeitplan. Server- oder Hosting-Konfiguration
Scheduled Tasks Erkennt fällige wiederkehrende Shopware-Aufgaben und plant sie ein. scheduled-task:run
Message Queue Verarbeitet asynchrone Nachrichten und eingeplante Aufgaben. messenger:consume
Service oder Prozessmanager Hält Worker dauerhaft am Laufen und startet sie nach Fehlern neu. Supervisor, systemd oder Hosting-Dienst
Ein Cronjob allein reicht nicht

Scheduled Tasks und Message Queue sind getrennte Prozesse. Werden nur Scheduled Tasks gestartet, können die erzeugten Queue-Nachrichten trotzdem liegen bleiben.

3. Shopware-Befehl zuerst manuell testen

Vor dem Eintragen eines Cronjobs muss derselbe Befehl in der Kommandozeile erfolgreich laufen.

In das Shopware-Verzeichnis wechseln

Shell
cd /pfad/zum/shopware-verzeichnis

Scheduled Tasks testen

Shopware CLI
/usr/bin/php bin/console scheduled-task:run --time-limit=60

Message Queue ab Shopware 6.5 testen

Shopware CLI
/usr/bin/php bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512M
Alten Receiver nicht weiterverwenden

Seit Shopware 6.5 wird der frühere Receiver default nicht mehr als Standard für diesen Worker verwendet. Bestehende Cronjobs nach einem Update kontrollieren.

Manueller Test erfolgreich

Erst wenn der Befehl ohne Cronjob fehlerfrei läuft, wird derselbe vollständige Aufruf in die Cronjob-Konfiguration übernommen.

4. Richtigen PHP-Pfad prüfen

Ein Cronjob besitzt häufig eine reduzierte Systemumgebung. Deshalb sollte nicht nur php, sondern der absolute Pfad zur gewünschten PHP-CLI-Version verwendet werden.

PHP-Pfad anzeigen

Shell
which php

PHP-Version kontrollieren

Shell
/usr/bin/php -v

Wichtige PHP-Werte anzeigen

Shell
/usr/bin/php -r "echo 'PHP: ', PHP_VERSION, PHP_EOL, 'Memory: ', ini_get('memory_limit'), PHP_EOL;"
Web-PHP und CLI-PHP können abweichen

Der Shop kann über den Webserver mit einer anderen PHP-Version laufen als der Cronjob. Für den CLI-Aufruf muss eine mit der installierten Shopware-Version kompatible PHP-Version verwendet werden.

5. Arbeitsverzeichnis und Pfade prüfen

Der Cronjob startet normalerweise nicht automatisch im Shopware-Hauptverzeichnis. Ohne cd findet PHP die Datei bin/console häufig nicht.

Aktuelles Verzeichnis prüfen

Shell
pwd
ls -lah

Vorhandensein der Konsole prüfen

Shell
test -f bin/console && echo "Shopware-Konsole gefunden"

Variante mit Arbeitsverzeichnis

Shell
cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console scheduled-task:list

Variante mit absolutem Konsolenpfad

Shell
/usr/bin/php /pfad/zum/shopware-verzeichnis/bin/console scheduled-task:list
Beide Varianten sind möglich

Wichtig ist, dass Shopware-Konsole, Projektdateien und Umgebung eindeutig gefunden werden. Bei komplexeren Installationen ist das explizite Wechseln in das Projektverzeichnis meist besser lesbar.

6. Benutzer und Berechtigungen des Cronjobs prüfen

Ein manuell ausgeführter Befehl kann unter einem anderen Benutzer laufen als der automatische Cronjob. Dadurch können Schreibrechte, Umgebungswerte und Zugriff auf Dateien abweichen.

Aktuellen Benutzer anzeigen

Shell
whoami

Rechte wichtiger Verzeichnisse prüfen

Shell
ls -ld var var/cache var/log public
  • Der Cronjob-Benutzer kann Shopware-Dateien lesen.
  • Der Benutzer kann in var/cache schreiben.
  • Der Benutzer kann in var/log schreiben.
  • Dateien werden nicht wechselnd von mehreren ungeeigneten Benutzern erzeugt.
  • Die Umgebungsdatei der Installation ist erreichbar.
  • Der Datenbankzugriff funktioniert unter dem CLI-Prozess.
Keine globalen Schreibrechte vergeben

Befehle wie chmod -R 777 sind keine geeignete Lösung. Eigentümer und Rechte müssen passend zur jeweiligen Hosting-Umgebung gesetzt werden.

7. Vorhandene Cronjobs anzeigen

Cronjobs des aktuellen Benutzers

Shell
crontab -l

Crontab bearbeiten

Shell
crontab -e

Auf Managed-Hosting-Systemen werden Cronjobs häufig ausschließlich in einer Hosting-Oberfläche verwaltet. Dann zeigt crontab -l möglicherweise nicht alle vorhandenen Aufgaben.

  • System-Crontab prüfen
  • Benutzer-Crontab prüfen
  • Hosting-Oberfläche prüfen
  • Supervisor- oder systemd-Dienste prüfen
  • Deployment- oder Container-Konfiguration prüfen
  • Doppelte Einträge ausschließen

8. Cronjob-Syntax und Ausführungsintervall prüfen

Eine klassische Cronzeile besteht aus fünf Zeitfeldern und dem auszuführenden Befehl.

Aufbau
Minute Stunde Tag Monat Wochentag Befehl
Beispiel Bedeutung
* * * * * Jede Minute
*/5 * * * * Alle fünf Minuten
0 * * * * Zu jeder vollen Stunde
30 3 * * * Täglich um 03:30 Uhr

Scheduled Tasks minütlich starten

Cronjob-Beispiel
* * * * * cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console scheduled-task:run --time-limit=55 >> /dev/null 2>&1

Message Queue minütlich starten

Cronjob-Beispiel für Shopware 6.5 und neuer
* * * * * cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console messenger:consume async low_priority --time-limit=55 --memory-limit=512M >> /dev/null 2>&1
Hosting-Intervall beachten

Manche Hoster erlauben keine minütlichen Cronjobs. Dann müssen Zeitlimit und Startintervall so aufeinander abgestimmt werden, dass keine langen Verarbeitungslücken oder unkontrollierten Überlappungen entstehen.

9. Fehlerausgabe sichtbar protokollieren

Während der Einrichtung darf die Ausgabe nicht sofort nach /dev/null umgeleitet werden. Sonst verschwinden die entscheidenden Fehlermeldungen.

Scheduled Tasks mit Diagnose-Log

Cronjob-Diagnose
* * * * * cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console scheduled-task:run --time-limit=55 >> /pfad/zum/shopware-verzeichnis/var/log/scheduled-task-cron.log 2>&1

Message Queue mit Diagnose-Log

Cronjob-Diagnose
* * * * * cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console messenger:consume async low_priority --time-limit=55 --memory-limit=512M >> /pfad/zum/shopware-verzeichnis/var/log/message-queue-cron.log 2>&1

Logdatei prüfen

Shell
tail -n 200 var/log/scheduled-task-cron.log
tail -n 200 var/log/message-queue-cron.log
Fehlerhinweis Mögliche Ursache
php: command not found Kein absoluter PHP-Pfad oder reduzierte Cron-Umgebung
Could not open input file: bin/console Falsches Arbeitsverzeichnis
Permission denied Falscher Benutzer oder fehlende Rechte
Allowed memory size exhausted CLI-Speicherlimit zu niedrig
No transport supports receiver Falscher oder veralteter Queue-Receiver
No such file or directory Ungültiger Pfad zur Installation oder Logdatei

10. Überlappende und doppelte Prozesse vermeiden

Ein neuer Cronjob kann starten, während der vorherige Prozess noch läuft. Dadurch entstehen mehrere Worker, zusätzliche Last und mögliche Sperren.

Laufende Shopware-Prozesse anzeigen

Shell
ps aux | grep -E "scheduled-task:run|messenger:consume" | grep -v grep
  • Laufzeit kürzer als das Startintervall wählen.
  • Doppelte Cronjobs entfernen.
  • Hosting-Cronjob und Systemdienst gemeinsam prüfen.
  • Admin Worker bei funktionierender CLI-Verarbeitung bewusst konfigurieren.
  • Für dauerhafte Worker einen Prozessmanager verwenden.
Cronjob oder Dienst bewusst wählen

Ein Cronjob eignet sich für kurze, regelmäßig neu gestartete Prozesse. Für kontinuierliche Queue-Verarbeitung mit automatischem Neustart ist ein überwachter Dienst häufig stabiler.

11. Besonderheiten von Hosting-Oberflächen beachten

Hosting-Anbieter verwenden unterschiedliche Eingabefelder und Ausführungsarten. Einige erwarten den vollständigen Shell-Befehl, andere trennen PHP-Version, Skriptpfad, Parameter und Intervall.

  • Ist „PHP-Skript“ oder „Shell-Befehl“ ausgewählt?
  • Kann ein Arbeitsverzeichnis hinterlegt werden?
  • Welche PHP-Version verwendet die Oberfläche?
  • Ist der Pfad absolut oder relativ zur Benutzerumgebung?
  • Wie werden Standardausgabe und Fehlerausgabe gespeichert?
  • Welche minimale Ausführungsfrequenz erlaubt der Hoster?
  • Gibt es serverseitige Laufzeit- oder Speichergrenzen?
SSH-Befehl nicht ungeprüft kopieren

Eine Hosting-Oberfläche kann bereits automatisch PHP voranstellen. Dann darf nicht zusätzlich ein vollständiger Shell-Aufruf in ein reines Skriptfeld eingetragen werden.

12. Dauerhafte Shopware-Hintergrundprozesse einrichten

Für einen stabilen Shopbetrieb müssen Scheduled Tasks und Message Queue unabhängig von einer geöffneten Administration verarbeitet werden. Shopware nennt dafür Cronjobs oder serverseitige Services.

Scheduled Tasks

Cronjob-Beispiel
* * * * * cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console scheduled-task:run --time-limit=55 >> /dev/null 2>&1

Message Queue

Cronjob-Beispiel für Shopware 6.5 und neuer
* * * * * cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console messenger:consume async low_priority --time-limit=55 --memory-limit=512M >> /dev/null 2>&1
Admin Worker erst danach deaktivieren

Der Admin Worker darf erst abgeschaltet werden, wenn beide serverseitigen Prozesse über mehrere Intervalle zuverlässig laufen.

config/packages/z-shopware.yaml
shopware:
    admin_worker:
        enable_admin_worker: false

13. Abschlusskontrolle

  • Der Shopware-Befehl funktioniert manuell.
  • Der absolute PHP-Pfad ist korrekt.
  • Die CLI-PHP-Version passt zur Shopware-Version.
  • Das Shopware-Arbeitsverzeichnis ist korrekt.
  • Der Cronjob läuft unter dem vorgesehenen Benutzer.
  • Schreibrechte für Cache und Logs sind vorhanden.
  • Die Cronjob-Syntax ist korrekt.
  • Das Ausführungsintervall ist für den Prozess geeignet.
  • Fehlerausgaben wurden während des Tests protokolliert.
  • Keine doppelten oder überlappenden Prozesse laufen.
  • Scheduled Tasks erhalten neue Ausführungszeiten.
  • Die Message Queue wird tatsächlich abgearbeitet.
  • Die fachliche Aufgabe funktioniert ohne geöffnetes Backend.
  • Die Verarbeitung bleibt über mehrere Intervalle stabil.
Cronjob funktioniert dauerhaft

Die Einrichtung ist abgeschlossen, wenn der Befehl automatisch, fehlerfrei und unter den vorgesehenen Serverbedingungen ausgeführt wird und die zugehörige Shopware-Aufgabe zuverlässig arbeitet.

Häufige Fragen

Warum funktioniert der Befehl per SSH, aber nicht als Cronjob?

Cronjobs besitzen häufig eine andere Umgebung. Typische Unterschiede sind PHP-Pfad, Arbeitsverzeichnis, Benutzer, Umgebungsvariablen und Dateirechte.

Wie oft sollten Shopware-Cronjobs laufen?

Scheduled Tasks und Message Queue werden häufig minütlich mit einem etwas kürzeren Zeitlimit gestartet. Die konkrete Frequenz hängt vom Hosting und der Aufgabenmenge ab.

Welche Cronjobs benötigt Shopware 6?

Für die üblichen Hintergrundprozesse müssen Scheduled Tasks und Message Queue verarbeitet werden. Weitere Cronjobs können von Erweiterungen oder individuellen Funktionen abhängen.

Warum soll ich absolute Pfade verwenden?

Cronjobs starten nicht zwingend in derselben Umgebung wie eine interaktive SSH-Sitzung. Absolute Pfade verhindern, dass PHP oder bin/console nicht gefunden werden.

Warum ist die Logdatei des Cronjobs leer?

Möglicherweise wird der Cronjob gar nicht gestartet, der Zielpfad ist nicht beschreibbar oder die Hosting-Oberfläche behandelt Ausgaben separat.

Ist Supervisor besser als ein Cronjob?

Für dauerhaft laufende Queue-Worker bietet ein Prozessmanager bessere Kontrolle über Neustarts und Prozessanzahl. Kurze periodische Aufgaben können weiterhin über Cronjobs laufen.

Verwandte Shopware-Anleitungen

Die Shopware Cronjobs funktionieren weiterhin nicht?

Ich prüfe PHP-Pfad, Arbeitsverzeichnis, Benutzerrechte, Scheduled Tasks, Message Queue und Server-Logs direkt in der bestehenden Shopware-Installation.

Technische Prüfung anfragen
Stand: Juli 2026 · Hinweise gelten für selbst gehostete Shopware-6-Installationen. Cronjob-Syntax, PHP-Pfade und verfügbare Serverfunktionen können je nach Hosting abweichen.