У мене завдання, яке займає близько 45 хвилин, і його потрібно виконувати щодня (синхронізація користувачів із декількома зовнішніми базами даних тощо).
Щоб впоратися з роботою, я встановив чергу кронів із hook_cron_queue_info()
наступним чином:
function mymodule_cron_queue_info() {
$queues = array();
$queues['update_users_queue'] = array(
'worker callback' => '_mymodule_process_user_queue_item',
'time' => 120,
);
return $queues;
}
Я заповнюю чергу за допомогою цієї функції:
function mymodule_queue_all_users_for_synching() {
//...query for users...
$queue = DrupalQueue::get('update_users_queue');
foreach($users as $user) {
$queue->createItem($user);
}
}
Функція заповнення черги називається завданням cron. Я використовую Elysia Cron , тому моя реалізація hook_cronapi()
:
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',
);
return $items;
}
Функція працівника для кожного елемента черги, визначена в, mymodule_cron_queue_info
виглядає так:
function _mymodule_process_user_queue_item($item) {
//...synchronize user ($item)...
}
Моє запитання: коли Cron насправді почне обробляти чергу?
Скажіть, я щодня заповнюю чергу о 3 годині ночі і хочу обробляти її 120 секунд кожні 30 хвилин, поки це не закінчиться-- чи потрібно мені створити ще одне завдання з крона ?