Drupal cron görevlerini çalıştırdığında, modüllerden tanımlanan cron sırasını otomatik olarak yönetir drupal_cron_run()
; ilk hook_cron()
uygulamalar başlatılır ve ardından cron sıraları boşaltılır.
Uygulamada hook_cronapi()
, modülünüzün cron kuyruğunu ele alan başka bir fonksiyon için bir giriş ekleyebilirsiniz.
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);
}
}
}
Alternatif, Drupal'ın sizin için cron kuyruğunu yönetmesine izin vermektir, ancak bu Drupal cron görevleri yerine getirildiğinde gerçekleşir. Modülünüzün cron kuyruğunu daha sık boşaltmak istiyorsanız, yalnızca Elysia Cron modülü tarafından yönetilen yeni bir cron görevi ekleyebilirsiniz.
Elysia Cron modülü, içindeki cron sıralarını yönetir elysia_cron_run()
; bu işlev elysia_cron_cron()
(bir uygulama hook_cron()
), drush_elysia_cron_run_wrapper()
(bir Drush komutu geri çağırma) ve kendi cron.php'sinden çağrılıyor . Eğer talimatları izlediyseniz INSTALL.txt dosyasında (özellikle "ADIM B: DEĞİŞİM SİSTEMİ CRONTAB (İSTEĞE BAĞLI)") ve herhangi çağırma yerini http://example.com/cron.php ile http: // örnek .com / sites / all / module / elysia_cron / cron.php , Elysia Cron modülünün halihazırda cron kuyruklarını işlemesi gerekir. Önerdiğim kod, etkin bir şekilde yapılması gerekiyorsa, modülünüzden kullanılan cron kuyruklarını işlemeyi hızlandırmak için kullanılabilir.
// 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();
}
}