Saya punya tugas yang membutuhkan waktu sekitar 45 menit untuk diselesaikan dan perlu terjadi setiap hari (menyinkronkan pengguna ke beberapa basis data eksternal, dll).
Untuk menangani pekerjaan, saya telah menyiapkan antrian cron dengan hook_cron_queue_info()
sebagai berikut:
function mymodule_cron_queue_info() {
$queues = array();
$queues['update_users_queue'] = array(
'worker callback' => '_mymodule_process_user_queue_item',
'time' => 120,
);
return $queues;
}
Saya mengisi antrian menggunakan fungsi ini:
function mymodule_queue_all_users_for_synching() {
//...query for users...
$queue = DrupalQueue::get('update_users_queue');
foreach($users as $user) {
$queue->createItem($user);
}
}
Fungsi mengisi antrian dipanggil sebagai tugas cron. Saya menggunakan Elysia Cron , jadi implementasi saya hook_cronapi()
adalah:
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;
}
Fungsi pekerja untuk setiap item antrian, didefinisikan dalam mymodule_cron_queue_info
seperti:
function _mymodule_process_user_queue_item($item) {
//...synchronize user ($item)...
}
Pertanyaan saya adalah, kapan sebenarnya cron akan mulai memproses antrian?
Katakanlah saya mengisi antrian setiap hari jam 3 pagi, dan ingin memprosesnya 120 detik dari setiap 30 menit sampai selesai - apakah saya perlu membuat tugas cron lain?