เมื่อ Drupal รันงาน cron มันจะจัดการคิว cron ใด ๆ ที่กำหนดโดยอัตโนมัติจากโมดูลในdrupal_cron_run()
; hook_cron()
การติดตั้งใช้งานครั้งแรกจะถูกเรียกใช้จากนั้นคิว cron จะถูกทำให้ว่างเปล่า
ในการดำเนินการhook_cronapi()
คุณสามารถเพิ่มรายการสำหรับฟังก์ชั่นอื่นที่จัดการคิว cron ของโมดูลของคุณ
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);
}
}
}
ทางเลือกอื่นคือให้ Drupal จัดการคิว cron ให้คุณ แต่มันจะเกิดขึ้นเมื่องาน Drupal cron ทำงาน หากคุณต้องการล้างคิว cron ของโมดูลของคุณบ่อยขึ้นคุณสามารถเพิ่มภารกิจ cron ใหม่ที่จัดการโดยโมดูล Elysia Cron เท่านั้น
โมดูล Elysia Cron จัดการคิว cron ในelysia_cron_run()
; ฟังก์ชั่นนี้จะถูกเรียกจากelysia_cron_cron()
(การดำเนินการhook_cron()
) drush_elysia_cron_run_wrapper()
(ก Drush คำสั่งการเรียกกลับ) และจากของตัวเองcron.php หากคุณทำตามคำแนะนำในไฟล์INSTALL.txt (โดยเฉพาะใน "ขั้นตอน B: เปลี่ยนระบบ CRONTAB (ตัวเลือก)") และแทนที่การร้องขอของhttp://example.com/cron.phpด้วยhttp: // ตัวอย่าง .com / sites / all / modules / elysia_cron / cron.phpโมดูล Elysia Cron ควรจัดการคิว cron แล้ว รหัสที่ฉันแนะนำสามารถใช้เพื่อเพิ่มความเร็วในการจัดการคิว cron ที่ใช้จากโมดูลของคุณหากมีความจำเป็นในการทำเช่นนั้น
// 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();
}
}