Quando o Drupal executa tarefas cron, ele lida automaticamente com qualquer fila cron definida nos módulos, in drupal_cron_run()
; as primeiras hook_cron()
implementações são invocadas e as filas cron são esvaziadas.
Na implementação hook_cronapi()
, você pode adicionar uma entrada para outra função que lida com a fila cron do seu módulo.
function mymodule_cronapi($op, $job = NULL) {
$items = array();
$items['queue_users_for_synch'] = array(
'description' => 'Queue all user accounts for synching.',
'rule' => '0 3 * * *', // Run this job every day at 3am.
'callback' => 'mymodule_queue_all_users_for_synching',
);
$items['clean_queue'] = array(
'description' => 'Clean the queue for the user synching.',
'rule' => '0 4 * * *', // Run this job every day at 4 AM.
'callback' => 'mymodule_clean_queue',
);
return $items;
}
function mymodule_clean_queue() {
$queues = module_invoke('mymodule', 'cron_queue_info');
drupal_alter('cron_queue_info', $queues);
// Make sure every queue exists. There is no harm in trying to recreate an
// existing queue.
foreach ($queues as $queue_name => $info) {
DrupalQueue::get($queue_name)->createQueue();
}
foreach ($queues as $queue_name => $info) {
$function = $info['worker callback'];
$end = time() + (isset($info['time']) ? $info['time'] : 15);
$queue = DrupalQueue::get($queue_name);
while (time() < $end && ($item = $queue->claimItem())) {
$function($item->data);
$queue->deleteItem($item);
}
}
}
A alternativa é permitir que o Drupal lide com a fila cron para você, mas isso acontece quando as tarefas do cron Drupal são executadas. Se você quiser esvaziar a fila do cron do seu módulo com mais frequência, poderá adicionar apenas uma nova tarefa do cron manipulada pelo módulo Elysia Cron.
O módulo Elysia Cron lida com as filas cron elysia_cron_run()
; esta função está sendo chamada de elysia_cron_cron()
(uma implementação de hook_cron()
), drush_elysia_cron_run_wrapper()
(um retorno de chamada do comando Drush) e de seu próprio cron.php . Se você seguiu as instruções no arquivo INSTALL.txt (em particular na "ETAPA B: ALTERAR O SISTEMA CRONTAB (OPCIONAL)") e substituiu qualquer chamada de http://example.com/cron.php por http: // example .com / sites / all / modules / elysia_cron / cron.php , o módulo Elysia Cron já deve estar lidando com as filas do cron. O código sugerido pode ser usado para acelerar o processamento das filas cron usadas no seu módulo, se houver efetivamente a necessidade de fazê-lo.
// This code is part of the code executed from modules/elysia_cron/cron.php.
define('DRUPAL_ROOT', getcwd());
include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_override_server_variables(array(
'SCRIPT_NAME' => '/cron.php',
));
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
if (!isset($_GET['cron_key']) || variable_get('cron_key', 'drupal') != $_GET['cron_key']) {
watchdog('cron', 'Cron could not run because an invalid key was used.', array(), WATCHDOG_NOTICE);
drupal_access_denied();
}
elseif (variable_get('maintenance_mode', 0)) {
watchdog('cron', 'Cron could not run because the site is in maintenance mode.', array(), WATCHDOG_NOTICE);
drupal_access_denied();
}
else {
if (function_exists('elysia_cron_run')) {
elysia_cron_run();
}
else {
drupal_cron_run();
}
}