Direkt zum Inhalt
Bild
banner-5.jpg

Konfiguration von Cron mit Drupal 8

AI-Translated
article publisher

Raman

Drupal

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.

  1. 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 Cron-Intervalls
    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.

  2. Manuelle Ausführung
    Wenn Sie Cron manuell ausführen möchten, gibt es 4 Möglichkeiten:

    1. Über die Admin-Benutzeroberfläche
      Navigieren Sie zu Verwalten → Konfiguration → System → Cron und klicken Sie auf „Cron ausführen“Manuelles Ausführen von Cron

    2. 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}"
    3. Verwendung von Drush
      $ drush cron

    4. Verwendung der Drupal-Konsole
      $ drupal cron:execute # oder verwenden Sie einen Alias - croe oder cre

  3. 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.
     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}"
    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.

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.

  1. Verwendung von hook_cron
    Implementieren Sie hook_cron in der .module-Datei wie jeden anderen Hook. 
    /**
     * Implements hook_cron().
     */
     function custom_module_cron() {
      // your job here
     }
    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.
     
  2. 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

Ready to start your digital transformation journey with us?

Verwandte Blogs

Zurück von der DrupalCon Atlanta 2025: Ein Meilenstein für OpenSense Labs

Zurück von der DrupalCon Atlanta 2025: Ein Meilenstein für OpenSense Labs

„Fit. Schnell. Für die Ewigkeit gebaut.“ Das war nicht nur ein Slogan, sondern die Denkweise, mit der wir zur DrupalCon…

Erklärbare KI-Tools: SHAPs Stärke in der KI

Explainable AI tools Explainable AI And SHAP OpenSense Labs

Wissen Sie, was erklärbare KI-Tools sind? Erklärbare KI-Tools sind Programme, die zeigen, wie eine KI ihre Entscheidungen…

KI-Chatbots: Präzision und Persönlichkeit in Perfektion

Creating AI Chatbot OpenSense Labs

In der Welt der künstlichen Intelligenz ist die Entwicklung eines KI-Chatbots, der nicht nur akkurate Informationen liefert…