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.
Shopware-Aufgaben funktionieren manuell, werden aber nicht regelmäßig und automatisch ausgeführt.
Falscher PHP-Pfad, falsches Arbeitsverzeichnis, ungeeigneter Benutzer oder fehlerhafte Cronjob-Syntax.
Cronjobs nur mit vollständigen Pfaden und sichtbarer Fehlerausgabe testen. Danach erst Logausgaben verwerfen.
Inhaltsverzeichnis
- Bedeutung von Cronjobs
- Cronjob, Scheduled Tasks und Queue
- Befehl manuell testen
- PHP-Pfad prüfen
- Arbeitsverzeichnis prüfen
- Cronjob-Benutzer prüfen
- Vorhandene Cronjobs anzeigen
- Cronjob-Syntax prüfen
- Fehlerausgabe protokollieren
- Parallele Aufrufe vermeiden
- Hosting-Oberflächen beachten
- Dauerhaften Betrieb einrichten
- 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.
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 |
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
cd /pfad/zum/shopware-verzeichnis
Scheduled Tasks testen
/usr/bin/php bin/console scheduled-task:run --time-limit=60
Message Queue ab Shopware 6.5 testen
/usr/bin/php bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512M
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.
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
which php
PHP-Version kontrollieren
/usr/bin/php -v
Wichtige PHP-Werte anzeigen
/usr/bin/php -r "echo 'PHP: ', PHP_VERSION, PHP_EOL, 'Memory: ', ini_get('memory_limit'), PHP_EOL;"
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
pwd
ls -lah
Vorhandensein der Konsole prüfen
test -f bin/console && echo "Shopware-Konsole gefunden"
Variante mit Arbeitsverzeichnis
cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console scheduled-task:list
Variante mit absolutem Konsolenpfad
/usr/bin/php /pfad/zum/shopware-verzeichnis/bin/console scheduled-task:list
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
whoami
Rechte wichtiger Verzeichnisse prüfen
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.
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
crontab -l
Crontab bearbeiten
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.
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
* * * * * 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
* * * * * 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
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
* * * * * 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
* * * * * 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
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
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.
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?
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
* * * * * cd /pfad/zum/shopware-verzeichnis && /usr/bin/php bin/console scheduled-task:run --time-limit=55 >> /dev/null 2>&1
Message Queue
* * * * * 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
Der Admin Worker darf erst abgeschaltet werden, wenn beide serverseitigen Prozesse über mehrere Intervalle zuverlässig laufen.
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.
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