web-dev-qa-db-fra.com

Emplois Cron dans Drupal 7

J'ai un fichier PHP qui effectue certaines tâches à intervalles réguliers.

J'ai placé ce fichier PHP dans un dossier de module personnalisé, mais j'ai trouvé que Drupal comme drupal_set_message() ne sont pas disponibles dans le = PHP.

Comment puis-je inclure les fonctions Drupal à l'intérieur de ce fichier PHP? Comment configurer ce fichier php pour qu'il soit exécuté en tant que tâche cron?)

4
ayush

Vous devez implémenter hook_cron () dans votre module et y exécuter ces tâches.

Ensuite, drupal exécutera automatiquement ces tâches lors de la gestion par défaut du cron).

Vous avez probablement utilisé drupal_set_message() uniquement à titre d'exemple, mais notez que l'utilisation de cette fonction dans une implémentation hook_cron () n'a aucun sens car il n'y a aucun utilisateur pour lire ces messages. Vous pouvez également enregistrer les messages avec watchdog () .

12
Berdir

Ce que rapporte Berdir est correct; les implémentations de hook_cron() sont appelées pendant les tâches Cron, si vous avez correctement défini la tâche cron. Cela signifie que vous devez ajouter un travail cron qui exécute l'une des commandes suivantes:

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

Pour autant que je me souvienne, vous devez également utiliser la clé cron indiquée dans les pages administratives Drupal.

Si, pour une raison quelconque (je doute qu'il y ait une raison pour que vous le fassiez), vous avez juste besoin d'exécuter ce script PHP, et pas tous les Drupal tâches cron, ce qui signifie que vous avez réellement défini deux tâches cron et que l'une exécute déjà les tâches Drupal cron, vous devez ajouter les lignes suivantes au début de la PHP fichier que vous essayez d'exécuter la tâche cron:

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

Ce faisant, le fichier PHP aura accès à toutes les fonctions disponibles dans bootstrap.inc . Si vous avez besoin d'une fonction disponible dans un autre Drupal include file, alors vous devez inclure ce fichier avec require_once(); si vous avez besoin d'une fonction disponible à partir d'un module Drupal, alors vous devez ajoutez drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL) après les lignes require_once().
Si vous avez besoin d'une fonction d'un module, alors vous devriez vraiment implémenter un module personnalisé (si vous n'en avez pas déjà un) qui implémente hook_cron() et qui inclut le PHP fichier vous devez l'exécuter.

Comme indiqué par Berdir, une tâche cron Drupal ne doit pas appeler drupal_set_message() car lorsque les tâches cron sont exécutées, ces messages ne sont pas visibles. Si vous devez signaler un message d'erreur que les utilisateurs administrateurs pouvaient voir, alors le code doit appeler watchdog () , qui a besoin de Drupal pour être complètement amorcé; la fonction est définie dans bootstrap.inc.

3
kiamlaluno