Hinter einer Website laufen viele sich wiederholende Aufgaben ab: der Versand von Newslettern, die Veröffentlichung geplanter Beiträge, die Bestandsabgleichung im Online-Shop, das Löschen temporärer Dateien, Backups und Berichte. Diese müssen nicht manuell gestartet werden: Cron ist der Zeitplaner von Linux-Servern, der zu festgelegten Zeitpunkten automatisch einen Befehl oder ein Skript ausführt. Bei cPanel-Hosting-Paketen können Sie dies über den Menüpunkt „Cron-Jobs“ in einer grafischen Benutzeroberfläche einrichten.
In dieser Anleitung erklären wir Ihnen, wie Cron funktioniert und wie Sie die Zeitplanung interpretieren. Schritt für Schritt erstellen wir eine Aufgabe in cPanel, geben praktische Befehlsbeispiele, zeigen Ihnen, wie Sie den integrierten Timer von WordPress ersetzen können, und fassen häufige Fehler zusammen.
Wozu dient Cron?
- WordPress: Geplante Beiträge, Aufgaben von Plugins, WooCommerce-Vorgänge (siehe unten: Ersetzung von wp-cron).
- Online-Shop: Bestands- und Preissynchronisierung mit dem Lieferanten, Erstellung von Produkt-Feeds, E-Mails bei abgebrochenen Warenkörben.
- Wartungsarbeiten: Löschen von Protokollen und temporären Dateien, Datenbankbereinigung, Leeren des Caches.
- Sicherung: Sicherung der Datenbank in eine Datei, die Sie anschließend herunterladen oder weiterleiten können.
- Berichte und Benachrichtigungen: tägliche Zusammenfassungen, Warnmeldungen.
- Scheduler von Frameworks: Laravel, Symfony und viele andere Frameworks basieren ihren eigenen Scheduler auf einem einzigen, minütlich ausgeführten Cron-Eintrag.
Das Auslesen des Cron-Zeitplans
Ein Cron-Eintrag besteht aus fünf Zeitfeldern und einem Befehl:
* * * * * parancs
│ │ │ │ └── Wochentag (0–7, Sonntag ist 0 oder 7)
│ │ │ └───── Monat (1–12)
│ │ └──────── Tag des Monats (1–31)
│ └─────────── Stunde (0–23)
└────────────── Minute (0–59)
*= alle Werte*/15= alle 15 (beispielsweise alle 15 Minuten)1,15= Aufzählung1-5= Zeitraum (zum Beispiel von Montag bis Freitag)
| Zeitplanung | Bedeutung |
|---|---|
*/15 * * * * |
Alle 15 Minuten |
0 * * * * |
Zu Beginn jeder Stunde |
30 2 * * * |
Jeden Tag um 2:30 Uhr |
0 6 * * 1-5 |
Wochentags um 6 Uhr morgens |
0 3 * * 0 |
Am Sonntag um 3 Uhr morgens |
0 0 1 * * |
Jeden ersten Tag des Monats um Mitternacht |
Die Zeitangaben beziehen sich auf die Zeitzone des Servers. Ausführlichere Informationen zur Syntax finden Sie in dem Artikel, der die crontab-Syntax erläutert; sollten Sie sich unsicher sein, können Sie auf der Seite crontab.guru durch Eingabe eines Zeitausdrucks auch in Textform nachsehen, was dieser bedeutet.
Erstellen eines Cron-Jobs in cPanel
- Melden Sie sich bei cPanel an und öffnen Sie in der Gruppe „Erweitert“ den Menüpunkt „Cron-Jobs“.
- E-Mail-Adresse (Cron-E-Mail): Geben Sie hier an, wohin das System die Ergebnisse der Aufgaben senden soll. Dies ist bei der Einrichtung hilfreich; anschließend empfiehlt es sich, diese Benachrichtigung zu deaktivieren (siehe unten).
- Neuen Cron-Job hinzufügen: Sie können aus der Dropdown-Liste „Allgemeine Einstellungen“ eine voreingestellte Zeitplanung auswählen (z. B. „Einmal pro Tag“) oder die fünf Felder manuell ausfüllen.
- Befehl: Geben Sie den auszuführenden Befehl ein (siehe Beispiele).
- Klicken Sie auf die Schaltfläche „Add New Cron Job“. Der Auftrag wird in der Liste unten angezeigt, wo Sie ihn später bearbeiten oder löschen können.
Die einzelnen Schritte werden auch in einem Artikel mit Bildern zur Erstellung eines Cron-Jobs im cPanel erläutert.
Befehlsbeispiele
Ausführen eines PHP-Skripts (dies ist die beste Methode, da das Skript direkt und unter Umgehung des Webservers ausgeführt wird):
/usr/local/bin/php /home/felhasznalonev/public_html/scripts/feladat.php
Anstelle von „felhasznalonev“ wird Ihr cPanel-Benutzername eingesetzt; den genauen Pfad können Sie im Dateimanager einsehen. Auf den cPanel-Hosting-Konten von aWh führt der Pfad „/usr/local/bin/php“ die PHP-Version aus, die Sie für Ihr Konto unter dem Menüpunkt „Select PHP Version“ eingestellt haben.
Aufruf einer URL (wenn die Aufgabe durch eine Adresse einer Website ausgelöst wird und nicht direkt als Datei verfügbar ist):
curl -s https://cegnev.hu/cron-feladat > /dev/null 2>&1
oder „wget -q -O /dev/null https://cegnev.hu/cron-feladat“. Dies ist langsamer und weniger zuverlässig als die direkte Ausführung über PHP, da der Vorgang über den Webserver und dessen Zeitbeschränkungen läuft.
WP-CLI-Befehl (sofern das Paket SSH und WP-CLI enthält):
cd /home/felhasznalonev/public_html && wp cron event run --due-now > /dev/null 2>&1
Laravel-Scheduler:
cd /home/felhasznalonev/projekt && /usr/local/bin/php artisan schedule:run > /dev/null 2>&1
Ersetzen von WordPress wp-cron
WordPress nutzt nicht das Cron-System des Servers, sondern ein eigenes „Pseudo-Cron“-System: Bei jedem Laden der Seite wird geprüft, ob eine fällige Aufgabe vorliegt, und falls ja, wird diese ausgeführt. Dies hat zwei Nachteile: Auf Seiten mit geringem Traffic verzögern sich die Aufgaben (wenn niemand die Seite besucht, werden sie nicht ausgeführt), während sie auf Seiten mit hohem Traffic unnötige Belastung und Verlangsamung verursachen.
Die Lösung: Deaktivieren Sie den integrierten Timer und führen Sie den Vorgang über den Cron-Job des Servers aus.
-
Fügen Sie in der Datei „
wp-config.php“ vor der Zeile „That’s all, stop editing!“ Folgendes ein:define( 'DISABLE_WP_CRON', true ); -
Erstellen Sie in cPanel einen Cron-Job, der beispielsweise alle 5 oder 15 Minuten ausgeführt wird:
/usr/local/bin/php /home/felhasznalonev/public_html/wp-cron.php > /dev/null 2>&1
Für Online-Shops (WooCommerce) ist eine Intervall von 5 Minuten ein guter Ausgangspunkt, bei einfachen Blogs reicht auch ein Intervall von 15 Minuten aus. Die detaillierten Schritte werden in dem Artikel über die Umstellung von WP-Cron auf einen cPanel-Cron-Job beschrieben.
Verarbeitung der Ausgabe
Standardmäßig sendet Cron die Ausgabe jedes Durchlaufs an die angegebene E-Mail-Adresse. Dies ist bei der Einrichtung hilfreich, würde jedoch bei einer alle 5 Minuten ausgeführten Aufgabe täglich 288 E-Mails bedeuten. Wenn die Aufgabe bereits einwandfrei funktioniert, fügen Sie am Ende des Befehls Folgendes ein:
> /dev/null 2>&1
Wenn Sie die Ausgabe speichern möchten, leiten Sie sie in eine Datei um (>> /home/felhasznalonev/logs/cron.log 2>&1) und leeren Sie das Protokoll von Zeit zu Zeit, damit der Speicherplatz nicht voll wird.
Fehlerbehebung: Wenn die Aufgabe nicht ausgeführt wird
- Falscher Pfad: Cron wird nicht im Ordner „
public_html“ ausgeführt; geben Sie daher für das Skript stets den vollständigen, absoluten Pfad an (und wenn das Skript relative Pfade verwendet, wechseln Sie zuvor mit dem Befehl „cd“ in den entsprechenden Ordner). - Falsches PHP: Wenn der Befehl lediglich „
php“ lautet, wird möglicherweise nicht die erwartete Version ausgeführt; verwenden Sie den vollständigen Pfad. - Berechtigungen: Das Skript muss für Ihren Benutzer lesbar sein; wenn Sie eine direkt ausführbare Datei (ein Shell-Skript) starten, muss diese auch über Ausführungsrechte verfügen.
- Zeitliche Abstimmung: Bitte überprüfen Sie, ob die fünf Felder in der richtigen Reihenfolge stehen und ob Sie die Zeitzone des Servers berücksichtigt haben.
- Das Skript selbst ist fehlerhaft: Führen Sie es manuell über SSH oder im Browser aus und sehen Sie sich die Fehlermeldung an; aktivieren Sie vorübergehend wieder den Versand der Ausgabe per E-Mail.
- Ressourcenbegrenzung: Auf Shared-Hosting-Paketen läuft auch der Cron-Dienst innerhalb der für das Konto festgelegten CPU- und Speichergrenzen. Eine ressourcenintensive, lang andauernde Aufgabe kann die Grenze erreichen oder die Website verlangsamen; wie Cron und SSH in die Ressourcenbegrenzungen einbezogen werden, erfahren Sie in unserem Knowledge-Base-Artikel.
Bewährte Vorgehensweisen
- Führen Sie nicht alle Aufgaben minütlich aus. Überlegen Sie sich, wie oft die Aufgabe tatsächlich ausgeführt werden muss; eine zu häufige Ausführung belastet die Ressourcen Ihres Kontos.
- Verteilen Sie die Startzeiten: Lassen Sie nicht alle Aufgaben zur vollen Stunde starten, wählen Sie beispielsweise 2:17 Uhr.
- Achten Sie bei lang andauernden Aufgaben darauf, dass der Prozess nicht neu gestartet wird, solange der vorherige noch läuft (beispielsweise mithilfe einer Sperrdatei oder des Befehls „
flock“). - Geben Sie kein Passwort in den Befehl oder die URL ein; speichern Sie vertrauliche Daten in der Konfigurationsdatei des Skripts außerhalb des Web-Stammverzeichnisses.
- Schützen Sie die über die URL aufrufbaren Aufgaben mit einem geheimen Schlüssel oder einer IP-Beschränkung, damit sie von außen nicht beliebig aufgerufen werden können.
Zusammenfassung
Cron ist ein zuverlässiger Timer für wiederkehrende Aufgaben auf Websites. In cPanel lässt er sich über den Menüpunkt „Cron-Jobs“ mit wenigen Klicks einrichten; verwenden Sie in den Befehlen stets den vollständigen Pfad, unterdrücken Sie die Ausgabe laufender Aufgaben und ersetzen Sie bei WordPress den integrierten wp-cront durch den Server-Cron. Auf den cPanel-Hosting-Paketen von aWh sind Cron-Jobs in jedem Paket verfügbar.
Häufig gestellte Fragen
Wie oft kann ich einen Cron-Job ausführen?
Die kleinste Einheit von Cron ist eine Minute. Auf einem Server mit Shared Hosting sollten Sie jedoch nur dann Aufgaben im Minutentakt ausführen, wenn dies tatsächlich erforderlich ist; für die meisten Aufgaben reicht eine Häufigkeit von 5 bis 15 Minuten oder einmal pro Stunde aus.
Woran erkenne ich, dass die Aufgabe ausgeführt wurde?
Lassen Sie die E-Mail-Benachrichtigung vorübergehend aktiviert oder leiten Sie die Ausgabe in eine Protokolldatei um und überprüfen Sie diese im Dateimanager.
Was ist der Unterschied zwischen PHP und den Befehlen wget/curl?
Der Befehl „php“ führt das Skript direkt aus und umgeht dabei den Webserver: Dies ist schneller und unterliegt keinen zeitlichen Beschränkungen im Web. „wget“ und „curl“ rufen eine Website-Adresse auf, als würde ein Besucher sie öffnen; verwenden Sie diese Befehle, wenn die Aufgabe nur über eine URL gestartet werden kann.
Welchen PHP-Pfad soll ich verwenden?
Auf den cPanel-Hosting-Konten von aWh wird der Pfad „/usr/local/bin/php“ verwendet; dieser führt die für Ihr Konto eingestellte PHP-Version aus.
Kann Cron die Website verlangsamen?
Ja, wenn eine ressourcenintensive Aufgabe häufig ausgeführt wird, da sie Ressourcen gemeinsam mit der Website nutzt. Planen Sie ressourcenintensive Aufgaben für Zeiten mit geringem Datenverkehr ein und führen Sie sie nicht unnötig häufig aus.
Benötigen Sie Cron für WordPress?
Dies ist nicht zwingend erforderlich, da WordPress auch mit dem integrierten Timer funktioniert. Bei Websites mit hohem Datenverkehr und Online-Shops empfiehlt es sich jedoch, auf den Cron-Job des Servers umzusteigen, da dieser zuverlässiger ist und die Website weniger belastet.