it-swarm-eu.dev

Cron úlohy v Drupal 7

Mám soubor PHP=), který provádí nějakou úlohu v konzistentních intervalech.

Umístil jsem tento PHP soubor do vlastní složky modulu), ale zjistil jsem, že Drupal funkce jako drupal_set_message() nejsou k dispozici uvnitř = PHP soubor.

Jak mohu zahrnout funkce Drupal funkce uvnitř tohoto PHP souboru? Jak nastavím tento soubor php tak, aby byl spuštěn jako úloha cron)?

4
ayush

Ve svém modulu musíte implementovat hook_cron () a provést tam tyto úkoly.

Potom drupal) tyto úlohy automaticky provede během výchozího zpracování cronů.

Pravděpodobně jste použili drupal_set_message() pouze jako příklad, ale všimněte si, že použití této funkce v implementaci hook_cron () nemá smysl, protože neexistuje žádný uživatel, který by tyto zprávy četl. Alternativně můžete protokolovat zprávy pomocí watchdog () .

12
Berdir

To, co uvádí Berdir, je správné; implementace hook_cron() jsou vyvolány během úloh Cron, pokud jste správně nastavili úlohu cron. To znamená, že musíte přidat úlohu cron, která provede jeden z následujících příkazů:

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

Pokud si pamatuji, musíte také použít klíč cron, který je uveden v Drupal administrativních stránkách).

Pokud z nějakého důvodu (pochybuji, že pro to máte nějaký důvod), stačí provést tento skript PHP skript a ne všechny Drupal) úkoly cron, což znamená, že jste ve skutečnosti nastavili dvě úlohy cron a jedna již provádí úlohy Drupal cron), měli byste přidat následující řádky na začátek PHP soubor, který se pokoušíte provést úlohu cron:

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

Pokud tak učiníte, bude mít soubor PHP=) přístup ke všem funkcím dostupným v bootstrap.inc . Pokud potřebujete funkci, která je k dispozici v jiném Drupal zahrnout soubor, pak musíte zahrnout tento soubor s require_once(); pokud potřebujete funkci, která je k dispozici z modulu Drupal modul), pak musíte přidat drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL) za řádky require_once().
Pokud potřebujete funkci z modulu, měli byste skutečně implementovat vlastní modul (pokud ještě nemáte), který implementuje hook_cron() a který obsahuje PHP soubor musíte spustit.

Jak uvádí Berdir, a Drupal cron úkol by neměl volat drupal_set_message(), protože při provádění cron úkolů by tyto zprávy nebyly viditelné. Pokud potřebujete nahlásit chybovou zprávu že uživatelé administrátora mohli vidět, pak kód musí volat watchdog () , který potřebuje Drupal, aby byl plný bootstrapped; funkce je definována v bootstrap.inc.

3
kiamlaluno