it-swarm.com.de

Cron-Jobs in Drupal 7

Ich habe eine PHP Datei, die einige Aufgaben in konsistenten Intervallen erledigt.

Ich habe diese PHP - Datei in einem benutzerdefinierten Modulordner abgelegt, aber ich habe festgestellt, dass Drupal Funktionen wie drupal_set_message() nicht in = verfügbar sind PHP Datei.

Wie füge ich Drupal Funktionen in diese PHP Datei) ein? Wie richte ich diese PHP-Datei so ein, dass sie als Cron-Job ausgeführt wird?

4
ayush

Sie müssen hook_cron () in Ihrem Modul implementieren und diese Aufgaben dort ausführen.

Dann führt drupal diese Aufgaben automatisch während der Standard-Cron-Behandlung aus.

Sie haben drupal_set_message() wahrscheinlich nur als Beispiel verwendet, beachten Sie jedoch, dass die Verwendung dieser Funktion in einer hook_cron () -Implementierung keinen Sinn macht, da kein Benutzer zum Lesen dieser Nachrichten vorhanden ist. Alternativ können Sie Nachrichten mit watchdog () protokollieren.

12
Berdir

Was Berdir berichtet, ist richtig; Implementierungen von hook_cron() werden während Cron-Jobs aufgerufen, wenn Sie die Cron-Task richtig eingestellt haben. Dies bedeutet, dass Sie einen Cron-Job hinzufügen müssen, der einen der folgenden Befehle ausführt:

/usr/bin/lynx -source http://example.com/cron.php > /dev/null 2>&1
curl --silent --compressed http://example.com/cron.php

Soweit ich mich erinnere, müssen Sie auch den Cron-Schlüssel verwenden, der auf Drupal Administrationsseiten) angegeben ist.

Wenn Sie aus irgendeinem Grund (ich bezweifle, dass es einen Grund dafür gibt) nur das Skript ausführen müssen PHP Skript) und nicht alle Drupal Cron-Tasks, dh Sie haben tatsächlich zwei Cron-Jobs festgelegt und einer führt bereits die Drupal Cron-Tasks aus. Dann sollten Sie die folgenden Zeilen am Anfang von PHP Datei, die Sie versuchen, Cron-Task auszuführen:

define('DRUPAL_ROOT', 'Set here the directory where Drupal is installed');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';

Auf diese Weise hat die Datei PHP] Zugriff auf alle in bootstrap.inc verfügbaren Funktionen. Wenn Sie eine Funktion benötigen, die in einer anderen Drupal include-Datei, dann müssen Sie diese Datei mit require_once() einschließen; wenn Sie eine Funktion benötigen, die von einem Drupal) Modul verfügbar ist, müssen Sie Fügen Sie drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL) nach den Zeilen require_once() hinzu.
Wenn Sie eine Funktion aus einem Modul benötigen, sollten Sie wirklich ein benutzerdefiniertes Modul implementieren (falls Sie noch keines haben), das hook_cron() implementiert und das PHP Datei müssen Sie ausführen.

Wie von Berdir gemeldet, sollte eine Drupal Cron-Task drupal_set_message() nicht aufrufen, da diese Meldungen bei der Ausführung von Cron-Tasks nicht sichtbar sind. Wenn Sie eine Fehlermeldung melden müssen Wenn Administratorbenutzer dies sehen können, muss der Code watchdog () aufrufen. Dies erfordert Drupal, um vollständig gebootet zu werden. Die Funktion ist in bootstrap.inc definiert.

3
kiamlaluno