Bir Cron veya düşük ortak aralığı (5 dakika? 1 dakika?) De yürütür Tarifeli görevi ekleyin.
Zamanlanmış görev kullanıcının görev sıklığına ilişkin bilgi tutan bir veritabanı tablosunu sorgulamak gerekir. Ben infaz için uygunluğu belirlemek için bir UNIX zaman damgası kullanın, sonra saniyede frekansı ifade olur. Hesaplama sonra biraz kolaydır:
- - (TIMESTAMP% 60) ŞİMDİ = DAMGASI: şimdiki zaman bulmak, (60 saniye aralığını varsayarak) yakın ortak aralıkta aşağı yuvarlanır
- Kimin aralığı geçerli sürenin daha da bölen kullanıcıları bul
Tablo bu gibi görünebilir:
CREATE TABLE `scheduled_tasks` (
`id` int(7) unsigned NOT NULL auto_increment,
`user_id` int(7) unsigned NOT NULL,
`task` varchar(32) NOT NULL,
`interval` int(10) NOT NULL,
`date_start` date NOT NULL default '0000-00-00',
`date_end` date NOT NULL default '2030-12-31', -- Hopefully you won't be still maintaining this app
PRIMARY KEY (`id`)
) ;
INSERT INTO `scheduled_tasks` (user_id, task, interval, date_start, date_end )
VALUES
(1, 'standard_job', 5*60, '2009-06-01', '2009-08-01'),
(2, 'standard_job', 10*60, CURDATE(), CURDATE() ),
(3, 'standard_job', 24*60*60, '2009-06-01', '2009-08-01')
Çalıştırmak için iş bulmak için, bu sorgu işe yarayabilir:
SELECT `user_id`, `task`
FROM `scheduled_tasks`
WHERE (UNIX_TIMESTAMP() - (UNIX_TIMESTAMP() % 60 ) ) % `interval` = 0
AND CURDATE() BETWEEN `date_start` AND `date_end`
Bu çalıştırmak için kullanıcıların / görevler listesi ile geri geliyor. Gerekirse kullanıcı başına birden çok giriş ekleyebilirsiniz.