J'ai une tâche qui prend environ 45 minutes et qui doit être effectuée chaque jour (synchronisation des utilisateurs sur plusieurs bases de données externes, etc.).
Pour gérer le travail, j'ai configuré une file d'attente cron avec hook_cron_queue_info()
les éléments suivants:
function mymodule_cron_queue_info() {
$queues = array();
$queues['update_users_queue'] = array(
'worker callback' => '_mymodule_process_user_queue_item',
'time' => 120,
);
return $queues;
}
Je remplis la file d'attente en utilisant cette fonction:
function mymodule_queue_all_users_for_synching() {
//...query for users...
$queue = DrupalQueue::get('update_users_queue');
foreach($users as $user) {
$queue->createItem($user);
}
}
La fonction de remplissage de la file d'attente est appelée en tant que tâche périodique. J'utilise Elysia Cron , mon implémentation hook_cronapi()
est donc:
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;
}
La fonction worker pour chaque élément de la file d'attente, définie dans, mymodule_cron_queue_info
est la suivante:
function _mymodule_process_user_queue_item($item) {
//...synchronize user ($item)...
}
Ma question est la suivante: quand cron commencera-t-il réellement à traiter la file d'attente?
Supposons que je remplisse la file d'attente tous les jours à 3 heures du matin et que je veuille la traiter 120 secondes toutes les 30 minutes jusqu'à ce que ce soit terminé - dois-je créer une autre tâche cron?