Ich habe eine Aufgabe, die ungefähr 45 Minuten dauert und jeden Tag ausgeführt werden muss (Synchronisierung von Benutzern mit mehreren externen Datenbanken usw.).
Um die Arbeit zu erledigen, habe ich eine Cron-Warteschlange hook_cron_queue_info()
wie folgt eingerichtet:
function mymodule_cron_queue_info() {
$queues = array();
$queues['update_users_queue'] = array(
'worker callback' => '_mymodule_process_user_queue_item',
'time' => 120,
);
return $queues;
}
Ich fülle die Warteschlange mit dieser Funktion:
function mymodule_queue_all_users_for_synching() {
//...query for users...
$queue = DrupalQueue::get('update_users_queue');
foreach($users as $user) {
$queue->createItem($user);
}
}
Die Funktion zum Füllen der Warteschlange wird als Cron-Task aufgerufen. Ich benutze Elysia Cron , daher ist meine Implementierung von 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;
}
Die Worker-Funktion für jedes Warteschlangenelement, das in definiert mymodule_cron_queue_info
ist, sieht folgendermaßen aus:
function _mymodule_process_user_queue_item($item) {
//...synchronize user ($item)...
}
Meine Frage ist, wann wird cron tatsächlich mit der Bearbeitung der Warteschlange beginnen?
Angenommen, ich fülle die Warteschlange jeden Tag um 3 Uhr morgens und möchte sie alle 30 Minuten für 120 Sekunden verarbeiten, bis sie fertig ist. Muss ich eine weitere Cron-Aufgabe erstellen?