Mam zadanie, które zajmuje około 45 minut i musi być wykonywane codziennie (synchronizacja użytkowników z kilkoma zewnętrznymi bazami danych itp.).
Aby obsłużyć pracę, skonfigurowałem kolejkę cron hook_cron_queue_info()
w następujący sposób:
function mymodule_cron_queue_info() {
$queues = array();
$queues['update_users_queue'] = array(
'worker callback' => '_mymodule_process_user_queue_item',
'time' => 120,
);
return $queues;
}
Wypełniam kolejkę za pomocą tej funkcji:
function mymodule_queue_all_users_for_synching() {
//...query for users...
$queue = DrupalQueue::get('update_users_queue');
foreach($users as $user) {
$queue->createItem($user);
}
}
Funkcja wypełniania kolejek jest wywoływana jako zadanie cron. Używam Elysia Cron , więc moja implementacja hook_cronapi()
to:
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;
}
Funkcja robocza dla każdego zdefiniowanego elementu kolejki mymodule_cron_queue_info
jest następująca:
function _mymodule_process_user_queue_item($item) {
//...synchronize user ($item)...
}
Moje pytanie brzmi: kiedy cron faktycznie zacznie przetwarzać kolejkę?
Powiedzmy, że wypełniam kolejkę codziennie o 3 nad ranem i chcę ją przetworzyć 120 sekund na każde 30 minut, aż się skończy - czy muszę utworzyć kolejne zadanie CRON ?