it-swarm.it

Cron lavori in Drupal 7

Ho un PHP che svolge alcune attività a intervalli coerenti.

Ho inserito quel PHP all'interno di una cartella del modulo personalizzata, ma ho scoperto che Drupal funzioni come drupal_set_message() non sono disponibili all'interno di = PHP.

Come posso includere Drupal funzioni all'interno di questo PHP? Come posso impostare questo file php per essere eseguito come cron job?

4
ayush

Devi implementare hook_cron () nel tuo modulo ed eseguire queste attività lì.

Quindi, drupal eseguirà automaticamente queste attività durante la gestione cron predefinita.

Probabilmente hai usato drupal_set_message() solo come esempio, ma nota che l'uso di quella funzione in un'implementazione hook_cron () non ha senso perché non c'è nessun utente a leggere questi messaggi. In alternativa, è possibile registrare i messaggi con watchdog () .

12
Berdir

Ciò che è riportato da Berdir è corretto; le implementazioni di hook_cron() vengono invocate durante i processi Cron, se l'attività cron è stata impostata correttamente. Ciò significa che è necessario aggiungere un cron job che esegue uno dei seguenti comandi:

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

Per quanto ricordo, è necessario utilizzare anche la chiave cron riportata in Drupal.

Se, per qualsiasi motivo (dubito che ci sia un motivo per farlo) devi solo eseguire quello PHP, e non tutti i Drupal cron task, il che significa che hai effettivamente impostato due cron job e uno sta già eseguendo i task Drupal cron, quindi dovresti aggiungere le seguenti righe all'inizio del PHP che stai tentando di eseguire cron task:

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

In questo modo, il PHP avrà accesso a tutte le funzioni disponibili in bootstrap.inc . Se hai bisogno di una funzione disponibile in un altro Drupal include il file, quindi devi includere quel file con require_once(); se hai bisogno di una funzione disponibile da un Drupal, allora devi aggiungi drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL) dopo le righe require_once().
Se hai bisogno di una funzione da un modulo, allora dovresti davvero implementare un modulo personalizzato (se non ne hai già uno) che implementa hook_cron() e che include il PHP file devi eseguirlo.

Come riportato da Berdir, a Drupal cron non deve chiamare drupal_set_message() perché quando vengono eseguite attività cron, quei messaggi non sarebbero visibili. Se devi segnalare un messaggio di errore che gli utenti amministratori potevano vedere, quindi il codice deve chiamare watchdog () , che deve essere Drupal per il bootstrap completo; la funzione è definita in bootstrap.inc.

3
kiamlaluno