Wenn Sie mit UNIX oder Linux vertraut sind, kennen Sie Cron vielleicht als Daemon oder Hintergrundprozess, der verwendet wird, um Aufgaben in regelmäßigen Zeitabständen zu planen. Diese Aufgaben oder „Cronjobs“ werden im Allgemeinen auf Servern ausgeführt und umfassen das Sichern von Datenbanken und anderen Dateien, das Bereinigen von Protokollen, das Senden von Systemberichten oder Newslettern usw. Sie werden in einer Crontab-Datei definiert und als folgender Ausdruck dargestellt.
# Minute Stunde Tag_des_Monats Monat Tag_der_Woche Befehl
# Zum Beispiel, um tägliche Datenbanksicherungen um 00:00 Uhr mit Drush durchzuführen
0 0 * * * /usr/bin/drush sql-dump --gzip --result-file="/path/db_`date '+%Y_%m_%d'`.sql"
Wenn es um Drupal geht, ist der Zweck von Cron ähnlich, aber seine Implementierung ist anders. Drupals automatisierter Cron ist ein Kernmodul und unterscheidet sich von dem in UNIX-ähnlichen Betriebssystemen verfügbaren Cron.
Der automatisierte Cron registriert einen Event-Subscriber. Immer wenn eine Anfrage an Ihre Drupal-Website gestellt wird, wird ein Codeabschnitt ausgeführt. Wenn wir uns diesen Code genauer ansehen, können wir feststellen, dass der automatisierte Cron, falls aktiviert, die geplanten Jobs oder Aufgaben nur dann ausführt, wenn die Differenz zwischen den Zeitstempeln der letzten Anfrage und der letzten Ausführung des Cron größer ist als das konfigurierte Intervall des Cron.
$interval = $this->config->get('interval');
if ($interval > 0) {
$cron_next = $this->state->get('system.cron_last', 0) + $interval;
if ((int) $event->getRequest()->server->get('REQUEST_TIME') > $cron_next) {
$this->cron->run();
}
}
Der automatisierte Cron von Drupal wird von vielen Kern- und Zusatzmodulen verwendet. Wenn Sie die Run-Methode genauer untersuchen, werden Sie feststellen, dass sie hauptsächlich zwei Dinge tut: Sie führt den Hook hook_cron aus und verarbeitet die Queue-Worker aller Kern- und Zusatzmodule. Wir werden später darauf zurückkommen und sehen, wie wir sie in unserem eigenen Modul implementieren können.
Wofür wird Drupal Cron verwendet?
Viele Kern- und Zusatzmodule verwenden Cron, um regelmäßige Wartungsarbeiten durchzuführen. Alle diese Jobs werden ausgeführt, wenn Cron ausgeführt wird. Sie müssen jedoch jedem Cronjob einen anderen Zeitraum zuweisen. Einige davon werden im Folgenden beschrieben.
|
Modul |
Typ |
Job |
|
dblog |
Kern |
Entfernt abgelaufene Protokollmeldungen und Flood-Control-Ereignisse |
|
Feld |
Kern |
Löscht gelöschte Field-API-Daten |
|
Verlauf |
Kern |
Löscht den Verlauf |
|
Suche |
Kern |
Aktualisiert indizierbare aktive Suchseiten |
|
Scheduler |
Zusatzmodul |
Veröffentlicht oder deaktiviert Nodes |
|
System |
Kern |
Bereinigung (Caches, Batch, Flood, temporäre Dateien usw.) |
|
Aktualisierung |
Kern |
Prüft auf Aktualisierungen |
Wie wird Cron ausgeführt?
Nachdem wir nun verstanden haben, was Cron ist und wofür er verwendet wird, wollen wir uns ansehen, wie wir Cron ausführen und diese Jobs durchführen können.
- Automatisierte Ausführung
Standardmäßig ist Cron so eingestellt, dass er alle 3 Stunden ausgeführt wird. Diese Dauer kann verlängert oder verkürzt werden, und diese automatisierte Ausführung kann auch deaktiviert werden. Wenn die detaillierte Protokollierung aktiviert ist, werden die Ausführungszeit und alle hook_cron in den Protokollmeldungen protokolliert.
Konfigurieren des Intervalls Wie bereits erwähnt, geschieht dies jedoch nur, wenn Ihre Website aktiv ist. Wenn Ihre Website keine Anfragen erhält, wird Cron nie ausgeführt.
-
Manuelle Ausführung
Wenn Sie Cron manuell ausführen möchten, gibt es 4 Möglichkeiten:-
Über die Admin-Benutzeroberfläche
Navigieren Sie zu Verwalten → Konfiguration → System → Cron und klicken Sie auf „Cron ausführen“Manuelles Ausführen von Cron -
Verwendung eines geheimen Schlüssels
Cron kann auch von außerhalb der Website ausgeführt werden, indem der geheime Schlüssel verwendet und eine Anfrage an cron/{your-secret-key} gestellt wird. Ihr geheimer Schlüssel ist unter admin/config/system/cron verfügbar.$ wget -q -O /dev/null "{your-drupal-site}/cron/{your-secret-key}" # Oder $ curl -s -o /dev/null "{your-drupal-site}/cron/{your-secret-key}" -
Verwendung von Drush
$ drush cron -
Verwendung der Drupal-Konsole
$ drupal cron:execute # oder verwenden Sie einen Alias - croe oder cre
-
- Ausführung mit System-Cron
Es wird empfohlen, nach Möglichkeit den System-Cron anstelle des automatisierten Drupal-Crons zu verwenden. Wenn Sie sich auf den Drupal-Cron verlassen, um wichtige Jobs auszuführen, sollten Sie den automatisierten Cron vollständig deaktivieren und den System-Cron verwenden, um den Drupal-Cron auszuführen. Auf diese Weise können Sie das Beste aus beiden Welten nutzen.
Wenn Sie über SSH auf Ihren Server zugreifen können, können Sie die Crontab-Datei mit crontab -e öffnen und den folgenden Cron-Ausdruck hinzufügen, um Cron beispielsweise stündlich auszuführen.
Einige Hostings wie cPanel bieten sogar eine GUI zum Einrichten von Cronjobs. Wenn Ihr Hosting es Ihnen jedoch nicht erlaubt, System-Cron auszuführen, können Sie Webcron-Dienste wie cronless oder EasyCron verwenden.0 * * * * cd /var/www/html/drupal8 && /usr/bin/drush cron # oder führen Sie Cron von außerhalb der Website aus 0 * * * * wget -q -O /dev/null "{your-drupal-site}/cron/{your-secret-key}" # oder 0 * * * * curl -s -o /dev/null "{your-drupal-site}/cron/{your-secret-key}"
Implementieren von Cronjobs in einem benutzerdefinierten Modul
Sie können Jobs in Ihrem benutzerdefinierten Modul implementieren. Diese werden ausgeführt, wenn Cron ausgeführt wird. Es gibt zwei Möglichkeiten, dies zu tun: mit hook_cron und mit Queue-Workern.
- Verwendung von hook_cron
Implementieren Sie hook_cron in der .module-Datei wie jeden anderen Hook.
Beachten Sie, dass Cron alle hook_cron-Implementierungen nacheinander ausführt und bei einem Fehler die Ausführung stoppt und die verbleibenden hook_crons nicht ausgeführt werden. Da eine Seitenanfrage das Ereignis zum Auslösen der Cron-Ausführung auslöst, führt ein zeitaufwändiger Job zu einer schlechten Reaktionszeit. Sie können ein Zusatzmodul, Ultimate cron, verwenden, wenn Sie die Jobs parallel ausführen möchten./** * Implements hook_cron(). */ function custom_module_cron() { // your job here }
- Verwendung von QueueWorkers und Queues
Für Jobs, die eine längere Verarbeitungszeit benötigen, können wir sie zu Queues hinzufügen. Wir müssen ein QueueWorker-Plugin im Verzeichnis /src/Plugin unseres Moduls definieren, indem wir die Klasse QueueWorkerBase erweitern und die Methode processItem implementieren.
Zusammenfassend
Drupal Cron ist ein Pseudo-Cron und wird normalerweise verwendet, um regelmäßige Wartungsarbeiten durchzuführen. Er wird oft als „Cron für arme Leute“ bezeichnet, da er für seine Ausführung von Seitenanfragen abhängt und hauptsächlich verwendet wird, wenn Ihr Hosting es Ihnen nicht erlaubt, System-Cron auszuführen. Verwenden Sie daher nach Möglichkeit den System-Cron, um wichtige Jobs auszuführen.
Abonnieren
Verwandte Blogs
Drupal KI-Ökosystem Teil 2: KI-Logging, Beobachtbarkeit & API-Explorer
Im ersten Teil unserer Serie haben wir die grundlegende Architektur erkundet und das Drupal AI Ecosystem sowie das AI…
DrupalCon Vienna: Wichtigste Erkenntnisse: Drupal mit KI transformieren
Dries hielt seine 43. Keynote auf der DrupalCon Vienna! „KI ist der Sturm… aber anstatt uns abzuwenden, müssen wir KI…
Drupal KI-Ökosystem Teil 1: Einrichtung und KI CKEditor Konfiguration
Die Drupal KI-Module integrieren künstliche Intelligenz nahtlos in das Drupal-Ökosystem und betrachten KI als fundamentalen…