Entwicklung und Datenbanken

Cron-Jobs in cPanel anlegen und ausführen

Geprüft am 9 Min. Lesezeit Cron

Ein Cron-Job führt einen Befehl in der von Ihnen eingestellten Häufigkeit aus. Damit lassen sich Aktionen planen, etwa eine Warteschlange abarbeiten, einen Bericht erzeugen oder die Wartung einer Anwendung starten.

Man kann sie zwar über das Terminal verwalten (Befehl crontab), aber der Bereich Cron-Jobs in cPanel erleichtert die Einrichtung über eine einfache Oberfläche.

E-Mail für Benachrichtigungen

Das ist die Adresse, an die Cron die Standardausgabe und die Fehler des Befehls sendet. Wenn der Job keine Ausgabe erzeugt, erhalten Sie keine Nachricht, die jede Ausführung bestätigt.

E-Mail für Benachrichtigungen der Cron-Jobs in cPanel

Neue Jobs hinzufügen

Verwenden Sie unter cPanel > Cron-Jobs die Option Neuen Cron-Job hinzufügen. Wählen Sie eine gängige Häufigkeit oder füllen Sie Minute, Stunde, Tag des Monats, Monat und Wochentag aus. Geben Sie danach den Befehl ein und speichern Sie.

Einen neuen Cron-Job in cPanel hinzufügen

Unter „Befehl“ legen Sie fest, was ausgeführt werden soll. Wenn Sie zum Beispiel eine Datei cron.php in public_html haben, die Wartungsaufgaben erledigt, geben Sie an:

cd /home/usuario_cpanel/public_html && /opt/alt/php83/usr/bin/php cron.php >> /home/usuario_cpanel/cron.php.log 2>&1

Das Beispiel verwendet PHP 8.3: Prüfen Sie, ob diese Version vorhanden und kompatibel ist. Verwenden Sie immer den vollständigen PHP-Pfad Ihrer Anwendung: /usr/local/bin/php oder einfach php können eine andere Version mit anderen Erweiterungen sein. cd legt das Arbeitsverzeichnis für Skripte fest, die relative Pfade verwenden; && verhindert, dass sie aus einem anderen Ordner ausgeführt werden, wenn der Wechsel fehlschlägt. Das Beispiel schreibt die Ausgabe in ein Protokoll, damit Fehler nicht verloren gehen. Prüfen und rotieren Sie diese Datei: Wenn Sie weder Protokoll noch E-Mails möchten, beenden Sie den Befehl mit >/dev/null 2>&1: Die Ausgabe wird verworfen. Das ist nützlich bei Jobs, die alle paar Minuten laufen und das Postfach mit Meldungen füllen würden, verbirgt aber auch jeden Fehler des Jobs.

Eine URL per Cron aufrufen

Wenn eine Anwendung eine URL für ihre Aufgaben bereitstellt, können Sie sie mit curl aufrufen:

curl --fail --silent --show-error --max-time 300 https://tudominio.com/ruta-de-cron

Behalten Sie bei den ersten Tests die Diagnoseausgabe bei und prüfen Sie das Ergebnis des Jobs in der Anwendung. Die E-Mail enthält die Ausgabe, nicht unbedingt den Rückgabecode. Wenn Sie bestätigt haben, dass es funktioniert, können Sie sie in einem privaten Protokoll speichern. Legen Sie vorher den Zielordner mit passenden Berechtigungen an:

curl --fail --silent --show-error --max-time 300 https://tudominio.com/ruta-de-cron >> /home/usuario_cpanel/logs/cron-url.log 2>&1

Wenn vorhanden, ist es besser, direkt den PHP- oder CLI-Befehl der Anwendung auszuführen, weil das DNS, SSL und eine vollständige Webanfrage vermeidet. Fügen Sie keine Passwörter oder dauerhaften Tokens in eine URL ein, die in Verläufen und Protokollen gespeichert werden könnte.

Wählen Sie ein Intervall, das länger ist als die maximale Ausführungszeit. Wenn ein Aufruf fünf Minuten dauert und Sie jede Minute einen weiteren planen, können sich die Jobs überschneiden und die Prozesse erschöpfen. Die Anwendung selbst muss eine Sperre implementieren, wenn sie keine gleichzeitigen Ausführungen verträgt.

Aktuelle Cron-Jobs

Unter Aktuelle Cron-Jobs finden Sie eine Liste der hinzugefügten Cron-Jobs, die Sie bei Bedarf bearbeiten oder löschen können.

Liste der aktuellen Cron-Jobs in cPanel

Den Zeitplan prüfen

Häufigkeit Minute Stunde Tag des Monats Monat Wochentag
Alle 15 Minuten */15 * * * *
Jeden Tag um 03:10 10 3 * * *
Jeden Montag um 03:10 10 3 * * 1

Diese Zeiten beziehen sich auf die Cron-Umgebung des Servers; prüfen Sie deren Zeitzone, bevor Sie eine Aktion planen, die an eine lokale Uhrzeit gebunden ist. Füllen Sie diese Felder in cPanel einzeln aus: Fügen Sie die fünf Felder nicht in das Feld Befehl ein.

Prüfen Sie nach dem Speichern die nächste Ausführung über ihr Protokoll oder das erwartete Ergebnis. Ein erfolgreicher manueller Test beweist nicht, dass Cron dieselbe Umgebung hat: Cron lädt normalerweise weder .bashrc noch die Variablen Ihres Terminals noch NVM. Verwenden Sie absolute Pfade und konfigurieren Sie explizit, was das Skript braucht.

Gleichzeitige Ausführungen vermeiden

Wenn der Befehl im Vordergrund läuft und flock verfügbar ist, können Sie während der gesamten Ausführung eine Sperre halten:

/usr/bin/flock -n /home/usuario_cpanel/tarea.lock /opt/alt/php83/usr/bin/php /home/usuario_cpanel/apps/mi-proyecto/tarea.php

Prüfen Sie die Pfade und dass die Anwendung nicht von einem anderen Arbeitsverzeichnis abhängt. Die Sperre wird freigegeben, wenn der Befehl endet; sie deckt weder Jobs ab, die er im Hintergrund startet, noch entfernte Prozesse, die nach einem HTTP-Aufruf weiterlaufen. Wenn die Sperre nicht erlangt wird, überspringt -n diese Ausführung: Prüfen Sie, ob dieses Verhalten für Ihren Job passt.

Das Löschen eines Cron-Eintrags verhindert künftige Ausführungen, stoppt aber keine laufende. Wenn der Job Zahlungen, Versand oder Datenänderungen vornimmt, prüfen Sie nach einer Zeitüberschreitung seinen Status, bevor Sie ihn wiederholen.

Queue-Worker: Cron oder dauerhafte Prozesse

Ein Queue-Worker, der per Cron gestartet wird, muss enden, wenn keine Arbeit mehr ansteht, und darf sich nicht mit dem der nächsten Minute überschneiden. Zum Beispiel für Laravel, jede Minute:

cd /home/usuario_cpanel/apps/mi-proyecto && /usr/bin/flock -n /home/usuario_cpanel/.cola-mi-proyecto.lock /opt/alt/php84/usr/bin/php artisan queue:work --stop-when-empty --max-time=300

Er arbeitet ab, was ansteht, und endet; wenn der vorherige noch arbeitet, überspringt flock -n diese Ausführung. Jobs warten höchstens eine Minute. In Laravel können Sie ihn auch über den Scheduler starten, wie wir unter Laravel installieren erklären.

Verwenden Sie Cron nicht, um einen Worker mit & oder nohup dauerhaft laufen zu lassen: Niemand überwacht ihn, wenn er abstürzt, startet er nicht neu, und ohne Sperre kommt jede Minute ein weiterer hinzu.

In den Tarifen Avanza, Max und Elastic halten die dauerhaften Prozesse einen Queue-Worker, Horizon oder einen eigenen Befehl ständig am Laufen und starten ihn neu, wenn er abstürzt. Wenn Sie sie nutzen, sehen Sie in Ihren Cron-Jobs eine Zeile, die auf # hostsuar-procesos endet: Das ist der Wächter, der sie jede Minute prüft. Bearbeiten oder löschen Sie sie nicht; sie wird über Tools > Prozesse verwaltet.

Eine Zeile mit schedule:run, die auf # hostsuar-deploy- und eine Zahl endet, ist der Scheduler einer Laravel-Anwendung, den Deploy+ beim Veröffentlichen eingerichtet hat. Diese gehört Ihnen: Sie können sie wie jede andere ändern oder löschen.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.